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.
According to the Google C++ style guide, please
```
Use unsigned integer types (preferably size_t) for object and
allocation sizes, object counts, array and pointer offsets, vector indices, and
so on.
```