WIP/API/ENH: IntervalIndex

Fixes #7640, #8625

This is a work in progress, but it's far enough along that I'd love to get
some feedback.

TODOs (more called out in the code):

- [ ] documentation + docstrings
- [ ] finish the index methods:
   - [x] `get_loc`
   - [x] `get_indexer`
   - [x] `slice_locs`
- [x] comparison operations
- [ ] fix `is_monotonic` (pending #8680)
- [ ] ensure sorting works
- [ ] arithmetic operations (not essential for MVP)
- [ ] cythonize the bottlenecks:
   - [ ] `from_intervals`
   - [ ] `_data`
   - [ ] `Interval`?
- [ ] `MultiIndex`
- [ ] `Categorical`/`cut`
- [ ] serialization
- [ ] lots more tests

CC @jreback @cpcloud @immerrr
@jreback I need some way to take the difference of two `DatetimeIndex` objects (returning a new DatetimeIndex). Because `+`/`-` still means union/set difference for indexes, I can't think of any way to do this right now short of converting to series objects (ugh) or converting the indexes to ndarrays and doing the `NaT` checks manually (also ugh).

What do you think? I think we either need to define `add` and `sub` methods for indexes (kind of pointless in the long term) or make `+`/`-` on indexes do arithmetic in 0.16. Or we could define temporary private `_add` and `_sub` methods on indexes for this strict benefit of this method.