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`.
May I suggest simply keeping old values, and simply adding new fields without reusing the numbers?

https://developers.google.com/protocol-buffers/docs/proto

(search for "deprecated (field option)")

Basically, what I have in mind is to have new fields called rectangular_[pad | kernel_size | stride], and have old fields still there. We can then add in our code branches whether the user is using the old or the new behavior, quitting loud if both are set.