Fixed issue with pow grad function trying to evalutate log at 0. Issue 1780
Added unit test.
Note: issue still occurs in debugmode.
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.
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.
Fix tests with pycuda example that now fail in the buildbot.
Fixed error message for scan op dimension mismatch
Add optimization to move mrg_uniform to the GPU.
fixed a bug in tensor/opt.py exception