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:
   - [ ] `get_loc`
   - [ ] `get_indexer`
   - [ ] `slice_locs`
- [ ] 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
you can generically do the index ops like this: https://github.com/pydata/pandas/blob/master/pandas/core/index.py#L43
alternatively you can have a ``_make_index_op`` that returns the a function