[WIP] various pooling implementations

I spent some time implementing pooling in a few different ways, because Theano's own `max_pool_2d` is a bit limited (only max-pooling supported, no overlapping pooling).

I will add a convolution-based average pooling implementation, and a cuda-convnet version of it, and a cuda-convnet based max-pooling implementation.

All the implementations have the same signature: `pool_2d(input, ds, strides, pool_function, *args, **kwargs)`. It might be a good idea to replace the current `MaxPool2DLayer` with a more general 'Pool2DLayer' that takes uses one of these functions. We can make it default to `pool_2d_mp` since that would be the most common use case.

Although I'm not sure `nntools.layers.cuda_convnet.MaxPool2DCCLayer` fits in then...

Now that GoogLeNet is out in the open I expect average pooling support to become more important :)