ENH: create Timedelta scalar / TimedeltaIndex

closes #3009
closes #8187
closes #8209
closes #4533 

This PR creates a new ``timedelta`` sub-class, the scalar ``Timedelta``, very similar to how ``Timestamp`` sub-classes ``datetime``. Further it creates a ``TimedeltaIndex`` modelled on ``DatetimeIndex`` that holds the underlying data (boxing is only on iteration).

- ToDo
  - Document API changes:
     - [x] ``to_timedelta`` return ``TimedeltaIndex`` rather than a ``Series``
     - [x] ``to_timedelta`` with scalar returns ``Timedelta`` (rather than ``np.timedelta64``)
     - [x] Boxing for ``list(Series(...))`` is now ``Timedelta``
     - [x] possible repr changes
     - [x] ``timedelta_range``
     - [x] usage / examples
     - [x] API
  - Timedelta
      - [x] conversions ``to_timedelta/to_pytimedelta``
  - TimedeltaIndex
      - [x] conversions ``to_pytimedelta``
  - [x] what else needs boxing in Series?
  - [x] fix formatters (Timedelta64Formatter; remove ``repr_timedelta64`` (no longer necessary)
  - [x] create ``timedelta_range`` & fix freq / inferred_freq
  - [x] fix remaining copied methods from DatetimeIndex
  - more tests (of TimedeltaIndex / scalar)
      - [x] scalar comparisons
      - [x] index comparisons
      - [x] getitem / partial string access
      - [x] sql expecting ``np.timedelta64`` ? (currently skipping these 2 tests!!!!), see: https://github.com/jreback/pandas/commit/2743ef16f7dfe55ba63663fa65c5671031af94f1
      - [x] validate series / td ops
  - move methods of ``TimedeltaIndex/DatetimeIndex``
      - [x] move ``DatetimeOpsMixin`` to ``tseries/base.py``?
      - [x] ``shift/take/order``
      - [x] ``slice_indexer``
      - [x] ``append/union/intersection``
      - [x] comparbless?
      - [x] ``.dt`` accessor are ok now
      - [x] move ``.td`` to ``.tdi``
I find it a bit confusing that `m` is minutes, while in the formatting language `M` is minutes and `m` is months. But OK, that is just the defaults in numpy datetimelike resolutions of course.

BTW, `Y` and `M` also do work:

```
In [89]: pd.Timedelta(10, 'M')
Out[89]: Timedelta('304 days, 08:51:00')
```