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
I guess in reality all I really need is the mean of two indexes. So I could also write a one-off function for that, doing the special work arounds for time indexes.