Generalize CONVOLUTION layer to multiple inputs/outputs

This PR generalizes the conv layer to take N>=1 bottom and produce N top blobs.  Currently, it requires that all bottom blobs be the same shape as that satisfies my current use case, but it could fairly easily be further generalized to handle inputs of different shapes.

This is for the use case of applying a single set of filters to multiple inputs.  It's equivalent to creating two conv layers with the same `convolution_param` settings and shared weights, so there's nothing here you couldn't do before; it's just probably  more convenient to specify in the prototxt (and slightly more memory efficient as the diff accumulation is done in a single add step, rather than an add and copy).