Precompile the kernels and embed the binary into the C file.
Rework the interface to GpuKernelBase to accept a list of kernel object.

Each item will be precompiled separetly and embedded into the c_code
of the Op. This allows ops that need multiple kernels or that will
choose between alternatives at runtime to use this interface.  It also
groups all kernel-related parameters under one object.

This change also save the source of the kernel code to re-attempt
source compilation in case the binary is rejected for some reason
(some implementations do not support reloading from pre-compiled
kernel).

There may still be more changes to how stuff works under the hood
(most notably a blacklist of bad runtime/drivers that crash when
attempting to create a kernel from a binary), but the visible
interface should not change anymore, so now is the time to start using
it more.
Fix a bunch of problems that I somehow managed to miss when testing the previous commit.
Move SpecifyShape
Make a register for SpecifyShape.c_code
Make SpecifyShape work on the GPU and tests.
pep8
Move print op to the new gpu back-end.
remove useless comparison
Fix copy-pasted docstring.
fix doc.
update doc.
Merge pull request #1839 from nouiz/specify_shape

Specify shape and print op to the new gpu back-end
Fetch the kernel name from the Kernel object in the c_code and document what Kernel represents.
Fix the last remaining problems with the existing clients and make the kernel code for MRG more OpenCL-friendly.
Make the DotModule c_code being cached.
Merge pull request #1833 from abergeron/kernel_precomp

Kernel precomp
Merge pull request #1841 from nouiz/version

Make the DotModule c_code being cached.
Fix tests with pycuda example that now fail in the buildbot.
Merge pull request #1842 from nouiz/fix_pycuda_example

Fix tests with pycuda example that now fail in the buildbot.