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``
Can you extend/format this docstring a bit? As this is a public object (and used a lot in the docs, as a 'better' version of `datetime.timedelta`)

Something like:

```
Represents a duration, the difference between two dates or times.

Timedelta is the pandas equivalent of python's ``datetime.timedelta``
and is interchangable with it in most cases. 

Parameters
----------
value : Timedelta, timedelta, np.timedelta64, string, or integer
unit : string, [D,h,m,s,ms,us,ns]
    Denote the unit of the input, if input is an integer.
days, seconds, microseconds, milliseconds, minutes, hours, weeks : numeric, optional
    Values for construction in compat with datetime.timedelta.

Notes
-----
The ``.value`` attribute is always in ns.
```