API: allow negative steps for label-based indexing

This should fix #8716.

This is still work-in-progress, but some of its refactoring may be useful for #8613, so I'd like someone to look through this.

cc'ing @shoyer, @jreback and @jorisvandenbossche .

TODO:
- [ ] fix datetime/period indices
- [ ] fix multiindex
- [ ] add tests for specific indexers
There's some black magic I'm untangling right now in `pandas.tseries.base`.