Fix Global.data_ro property for device backends
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