Non-square Filters and Separated Stride and Padding

*Note this is a work in progress and I need to double-check the indices and add new tests.*

Accept pairs of height/Y and width/X values for kernel size, stride, and pad in lieu of a single, shared value.

Of course the square/equal case still works and the old defaults (stride = 1 and padding = 0) are kept.

Open to comments on implementation and style. In particular, the pairs of variables feel awkward and I might switch to `std:pair`.
(Please see my comments regarding protobuf fields)

Maybe we can save old format by having:

if (conv_param.has_kernel_size()) {
  kernel_height_ = conv_param.kernel_size();
  kernel_height_ = conv_param.kernel_size();
} else {
  CHECK_EQ(conv_param.rectangular_kernel_size_size(), 2)
     << "Must specify either kernel_size or rectangular_kernel_size (2 numbers).";
  kernel_height_ = conv_param.rectangular_kernel_size(0);
  kernel_height_ = conv_param.rectangular_kernel_size(1);
}

This may provide maximum backward compatibility.