Refactor sequential and OpenMP code generation

There is almost 100% code duplication between the sequential and OpenMP backends, which makes both unnecessarily hard to maintain. Also most of the code generation acts on `Arg`s, but all of happens in the `ParLoop` class. Conceptually it seems cleaner to have the `Arg` generate its own wrapper code.

Introduce a `host` module with base classes for host backends, to reduce duplication and facilitate sharing code generation functionality between the sequential and OpenMP backends.

[Passes on buildbot](http://buildbot-ocean.ese.ic.ac.uk:8080/builders/pyop2-testing/builds/225)