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
I mentioned somewhere else, you can pull this in from ``tseries/base.py`` (along with the boxing functionaility), but make a BoxMixIn (or something like this to include here).