I'm tired. Really tired of seeing how the XXXXX's-vendor SDK is not compatible with YYYYY's-vendor implementation. For instance, if you compile a program with the ATI's SDK it won't run using a NVIDIA card. Also, the Intel's SDK eats the NVIDIA's DLLs and registry keys...

I think the solution is that Khronos should release not only the .h files but also the OpenCL.lib/.a to find the ICD DLL, load it and get the clXXXXXXX function pointers.
It's very easy: for Windows, you should release a OpenCL.lib that finds the ICD in the registry, then call LoadLibary and get the function pointers with GetProcAddress().

I really think this is the only valid solution because IHVs seem to be very occupied fighting against them and, who looses, is the poor programmer who simply cannot write a truly multivendor-compatible OpenCL app with guarantees.