DownsampleFactorMax support strides: issue #2196

In the case where `ignore_border == False`, instead of using multiple switch statements (which seem broken atm because existing tests are failing), I think we can use:
- when `st >= ds`: `nr = (r - 1) // st[0] + 1`. There is not even a need for calling `max(..., 0)`.
- when `st < ds`: `nr = max(0, (r - 1 - ds[0]) // st[0] + 1)) + 1`.
The corresponding theano expression would simply be:
```python
nr = tensor.switch(tensor.ge(st[0], ds[0]),
                   (r - 1) // st[0] + 1,
                   max(0, (r - 1 - ds[0]) // st[0] + 1) + 1)
```
And idem for `nc`.
I did not have time to test that it fixed the current failing test, but it should be straightforward to check.