Implement our own CPU compilation

Instant is rather heavyweight for our needs, and it is very difficult to
modify either compilation flags or the compiler being used.  All we
really need to do is compile a single source file to a shared library
and load it with ctypes.  We can then set up the argument types to the
function we get back appropriately and call as before.
Respect debug configuration setting when compiling
Add _argtype properties to objects

Those objects which we pass to the compiled kernel will need a ctypes
argtype once we move away from instant compilation.
Make mat_utils purely a header file

We basically just paste the code in anyway, so why not get the
preprocessor to do it for us.
Migrate host code generation to compilation module

Rather than building a wrapper that takes PyObjects and unpacks them
into data, just write a wrapper with C types.  Now that we're using
ctypes to load the shared library we build, we just need to set the
argument type up appropriately on the ctypes function pointer.
Remove references to instant

No need to require it as part of the installation, or mention it in the
backend documentation.
Pass -std=c99 to preprocessor

We compile with c99 (and some of our header files are not c89
compatible), so pass that flag to the preprocessor too.