base: Add name property to Arg object

This is constructed from the position of the Arg in the par_loop.  To
keep track of this, we record the position, and also the
"indirect_position" (the position of the first Arg that has the
dat/map pair of this Arg, this latter is necessary for generated
device code where we uniquify arguments passed to the stub).
Use Arg.name property in generated host code
Use Arg.name in generated device code
Merge pull request #209 from OP2/unique-names-in-generated-code

Avoid using the names of PyOP2 objects in the generated code.
This fixes an error where the same name would be given for two
Dats (say) and also ensures we don't miss the disk cache when we
don't need to.