Add support for subsampling and gradient to GpuDnnConv

This adds a grad() method to GpuDnnConv and adds support for subsampling.  It also allows choosing between convolution and cross-correlation mode (however cross-correlation mode has not been tested).

I've also made a base class that create the cudnn handle to make other ops easier to write.
Here atol was used. I understand that it was not used in the other part that you refactored. The problem is that the method have atol as a parameter and it isn't used currently. I see 2 options, remove this parameter or use it for the comparison to the CPU.