Kernel precomp

I've tested this through the GpuEye Op which uses GpuKernelBase, and it seems to work great.

This speeds up gpu code initialization (when loading modules from cache) and allows the user to get compile errors for his kernel source during the compile phase (rather than at module load time).

There is backward compat code that will attempt to recompile the kernel from source should the binary initialization fail (and it always does on some platform/device combinations).