Users can specify custom headers and code snippets for kernels

Add two optional arguments to the Kernel constructor:

* headers: Allow passing additional system headers to be included.
* user_code: Allow executing user code snippet in the kernel wrapper.

These features are needed to e.g. allow a user to use a par_loop to
initialise a Dat with random data and also set a random seed.