Added GpuDownsampleFactorMaxGradGrad

This PR adds the GpuDownsampleFactorMaxGradGrad GPU Op which is a fast version of downsample.DownsampleFactorMaxGradGrad, which currently performed in pure python. I've added optimization and a test.

Also I corrected  bug in the tests of test_blas. Some tests would fail because enabling cuDNN by default would prevent Ops like GpuDownsampleFactorMaxGrad from being inserted.
It's actually a slightly unrelated bugfix. cuDNN implements max pooling and
it replaces the GpuDownsample, which makes their test break because it cant
find the GpuDownsample in the graph.

On Fri, Dec 19, 2014 at 4:15 PM, Frédéric Bastien <notifications@github.com>
wrote:

> In theano/sandbox/cuda/tests/test_blas.py
> <https://github.com/Theano/Theano/pull/2316#discussion-diff-22129336>:
>
> >  else:
> > -    mode_with_gpu = theano.compile.mode.get_default_mode().including('gpu')
> > -    mode_without_gpu = theano.compile.mode.get_default_mode().excluding('gpu')
> > +    mode_with_gpu = theano.compile.mode.get_default_mode().including('gpu').excluding('cudnn')
> > +    mode_without_gpu = theano.compile.mode.get_default_mode().excluding('gpu').excluding('cudnn')
>
> Why exclude cudnn? It should not be needed, the new op isn't implemented
> by cudnn I think. If it is, tell me.
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/Theano/Theano/pull/2316/files#r22129336>.
>