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.
This is extremely minor, but I suggest considering adding the copy dimension to the DEBUG_PRINTF call (printing out the dimension loop variables). Right now the debug output using this branch (and the relevant test) spews a ton of identical clEnqueueWriteBuffer calls, it would be useful for verifying behavior (and maybe somehow useful for debugging in the future) if the calls were identified.