ENH: more flexible describe() + tests

this patch adds a return_type keyword argument to describe() to make it more
flexible to use on mixed-type dataframe. User can now select among returning
numeric, categorical, or both, as well as 'auto' (previous behaviour, default),
and 'same', which keep columns identical (useful, e.g. with groupby())
``.std()`` will now raise ``TypeError`` on timedeltas64[ns] (after you rebase to master). So wrap the ``.std()`` call in something like:

```
def std(x):
    try:
         return x.std()
    except:
         return np.nan
```