Support GpuCumsum on 3D array.

Modified GpuCumsum op to support 3D array.
Let's say I want to do a cumsum on a really big 3D array along the first dimension. Basically, we want to do `shape[1]*shape[2]` local cumsums. If the array has a big first dimension (i.e. `shape[1] > maxGridY`),  the offset Y will  be use to move the local cumsum operator along that dimension by chunk of `maxGridY`. The same goes for the third dimension but I'm using offset Z. There is definitively a better way to do it and that can support N-dimensional array.