Dat copy constructor

Eat our own dogfood and use a par_loop to do the copy.  This way, we get correct behaviour on devices for free, I think.  Hopefully fully addresses #237.  As a side-effect, fixes a bug in the data_ro accessor on devices.