Error if attempting to iterate over a MixedSet

We currently dtrt if passed a mixed iteration set to a par_loop, so
raise an exception instead.
Fix Global.data_ro property for device backends
Opencl: alias names for non-unique Dats in direct loop codegen

Consider a parallel loop that accesses the same Dat twice:

    par_loop(..., dat(READ), dat(READ))

as happens when computing the inner product of a dat with itself.  The
opencl codegen only produces a wrapper stub argument for dat once, but
inside it assumes that it can see it twice.  Set up aliases in the
wrapper so that we can refer to dat as either arg0 or arg1.
Add magic methods to MixedDats

This allows +, * and friends to work as expected.
Add inner and norm methods to Dats

Only l2 inner product implemented for now.
Add test of Dat.inner
Add Neg (unary minus)
Allow passing no pragma to c_for

This gives us a short way of constructing a for loop that is not an
iteration space loop.
Convert all base Kernel constructions to use AST
Merge pull request #338 from OP2/linalg

- Support magic methods on mixed dats.
- Replace all construction of kernels in PyOP2 by IR kernels.
- Very minor device backend fixes.