Allocate zeroed Dat buffer on device

We promise if the user doesn't pass us data it is zeroed, but we were
not previously doing this on device backends.
Fix copy par_loop for MixedDat and add test for it
Add MixedDat copy constructor and test for it
Add optional subset argument to Dat's copy method

The copy method on a MixedDat does not support subsets.