Convolution layer using cudnn.

TODO:
 - [x] tests
 - [x] a way to use the gpu without cudnn
 - [ ] avoid GpuContiguous where possible
 - [ ] add support for subsamples.
I chose 'cudnn' as a generic tag to enable cudnn-optimized ops.  I can change it to 'dnn' but that feels too generic.