CumsumOp on GPU

CUDA implementation of the cumsum for 1D and 2D array. I didn't have time to look how to implement a generic ND version yet.

I put the code in a new file called ``extra_ops.py`` in the ``sandbox.cuda`` folder. I didn't know how/where to put the GPU version of the cumsum, so I took ``sandbox.cuda.neighbors.py`` as an example.

I also added some check and unit test for the CPU version of the cumsum.

Let me know if I should have use a architecture/function/variables that I wasn't aware of.
I think I found we it worked. In the Op HostFromGpu, https://github.com/Theano/Theano/blob/master/theano/sandbox/cuda/basic_ops.py#L102, 
`CudaNdarray_CreateArrayObj` does not conserve/transfert the strides from CudaNdarray to PyArray. So, while on the GPU the cumsum op uses more space than needed, but as soon as the results are returned on the CPU, the size in memory and the array's strides are correct. That means unit tests pass without any problem even though I compared the array's strides or its memory size.

So, I don't know how to create a unit test to check this in particular, but I will modified the GPU code to reduce its memory allocation.