added support for ArrayData views

ArrayData can now be initialized with another ArrayData object as
parameter. This creates a view to the existing data instead of
allocating a new array.
added __getitem__() and __setitem__() to CUDArray.
conv and pool operations are now classes

This maked the interface simpler because we don't have to arguments
like padding and striding for all function calls. More importantly,
the user does not have to consider bookkeeping data like the mask
used for pooling.