Gpu non contiguous copies

Fixes #318 

I'd appreciate your eyes, @dsharletg, to make sure I'm not breaking anything, and that this is a reasonable way to do the non-contiguous copy.
We should remove this if at all possible. It isn't obvious to me why it is necessary, unless you are doing something really interesting and you are using out-of-order command queues, OpenCL generally doesn't need explicit synchronization like this. 

It might be reasonable to put it within the #ifdef DEBUG below if the goal is to collect good timing data?