Convolution layer using cudnn.

TODO:
 - [x] tests
 - [x] a way to use the gpu without cudnn
 - [ ] avoid GpuContiguous where possible
As this file name is dnn.py, add the "dnn" name as a tag.