FFT 3d convolution

Implemented the FFT 3d convolution with almost the code shared with the FFT 2d convolution.
I was writing code to use conv3d2d and I found out that it doesn't support border_mode='full'. It does only 'valid'. In order to get a setup that would rework the data to have the 'full' convolution be performed with a call to 'valid', I would have to write exactly the kind of the code that you wanted to avoid, in which we risk being off by one by manipulating arrays.

I also noticed that conv3d2d.conv3d does not support having a filter of dimension 1 in time. It's a bit of a degenerate case, in a way, because it's just a bunch of 2d convolutions performed on each time slice, but I can imagine how someone would use that to leave the optimisation to the 3d convolution implementation.

The point here is that it's definitely worth testing the case for the full convolution and the case for a time dimension of 1, but we can't test conv3d_fft against conv3d2d.conv3d in those cases.