Add optional argument headers to Kernel

Allows passing additional system headers to be included.
Allow executing user code snippet in kernel wrapper

Add an optional argument user_code to the Kernel constructor, which
allows specifying a code snippet which is to be executed at the very
start of the generated kernel wrapper. This allows executing some
code as a one-off, such as setting a random seed.
Document Kernel parameters
Add example usage of headers, user_code to docstring
Fix a bug when using vectorizer and split together
Treat IOError exception as cache lookup failure
Merge pull request #362 from OP2/fix-vectorizer

Fix vectorizer and splitter bug
Merge pull request #361 from OP2/feature/user-headers-and-code

Users can specify custom headers and code snippets for kernels
Avoid creation of nested blocks in the IR
Merge pull request #363 from OP2/fix-nested-blocks

Avoid creation of nested blocks in the IR
Add test that Dat copy increases version of copied-into Dat
Add modifies_argn decorator

Use this to indicate that a method modifies its nth argument.
Add modifies_argn decorators to Dat.copy and Solver.solve