Use gradient_undefined instead of None in MRG uniform
Catch exception and forward NullType to input gradients, instead of failing
Try to fix how Null gradients are propagated in Scan

- propagate NullType when summing different gradient contributions
- identify which outer outputs of the scan node implementing the grad
  should be Null
- replace them, and the corresponding inner variables, with zeros
  of the appropriate size, so the scan node can be compiled and run.
- introduce a difference in undefined gradient because going through
  a shared variable with updates, and because a NullType was returned
  by the internal graph.
Actually compile and run the grad scan node.
Update comment, indentation.
Mark first batch of really slow tests.
Mark some more tests as slow and do some cleanup while there.
Fix huge amount of whitespace in between function arguments in tests.
Tag a bunch of slow tests according to the linux timings.
Attributes on a class can be a source of problems.
Some changes following review
Copy of ops GpuSoftmax and GpuSoftmaxWithBias from theano/sandbox/cuda/nnet.py to theano/sandbox/gpuarray/nnet.py
Copy of tests test_softmax() and test_softmax_with_bias() from theano/sandbox/cuda/tests/test_nnet.py to theano/sandbox/gpuarray/tests/test_nnet.py
Changed parent classes and added methods c_headers() and c_compiler() to ops GpuSoftmax and GpuSoftmaxWithBias.
Changed float to npy_%(dtype)s in ops GpuSoftmax and GpuSoftmaxWithBias.
Convert x->nd to PyGpyArray_NDIM(x) in ops GpuSoftmax and GpuSoftmaxWithBias.
Convert x->nCudaNdarray_HOST_DIMS to PyGpuArray_DIMS in ops GpuSoftmax and GpuSoftmaxWithBias.
Convert CudaNdarray_HOST_STRIDES to PyGpuArray_STRIDES in ops GpuSoftmax and GpuSoftmaxWithBias.
Convert CudaNdarray_DEV_DATA to PyGpuArray_DATA in ops GpuSoftmax and GpuSoftmaxWithBias.
Convert output creation to use pygpu_empty and replace PyArray_DATA with updated code in ops GpuSoftmax and GpuSoftmaxWithBias.