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.
In fact, even with `np.ones` beyond `2**24` `np.cumsum` (in float32) will produce incorrect values since `2**24+1 = 2**24` in float32, whereas the GPU version uses an dichotomy approach and produce more accurate error. I don't know what to do in these case. Should I warn the user when the number of elements is greater than `2**24` even though floating error will still happen with fewer elements?

I think `sum` function will be subject to this kind of error too, how is it handle currently int Theano-GPU?