Shared col buffer between Convolution Layers

This PR replaces #517.

Inspired by conversations with @forresti about using a shared_col_buffer between different ConvolutionLayers, this PR creates a `shared_col_buffer` in `Net` to be shared by the `ConvolutionLayers`

The size of the `shared_col_buffer_` will be maximum of the sizes of the shared `col_buffer`.

Now by default, any ConvolutionLayer would use a shared col_buffer, but it can have its own col_buffer by setting the corresponding `ConvolutionParam.share_col_buffer` to false in the corresponding `prototxt`.

This PR further reduces the memory consumption of Caffe.
I tried `size_t` but then `max::std` didn't like it. So I could change to `uint` or cast `count` to `size_t`.