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