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.
I think I see the motivation now, it's the non-blocking writes. I suppose there isn't much difference between making the last write blocking, and using clFinish, so scratch my previous comment. I recommend we put a comment on this clFinish explaining it though. I remember that when I started working on the OpenCL target, I simply removed *all* clFinish calls not in #ifdef DEBUG because none of them were necessary :)