DownsampleFactorMax support strides: issue #2196

It would be much more readable to use `input.shape[0]` here, since input is supposed to be a 2D matrix, not a 4D tensor as in the Op itself.
Actually, it would be better to assigne `input.shape[0]` and `input.shape[1]` to some variables at the top of the function, and use them later on.