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())
Unless i missed something, i believe by default only the *columns* order is preserved; the index order is lexsorted; that makes the output a bit unfriendly. Without it:
```python
pd.concat(ldesc, keys=fself.columns, axis=1)
Out[38]: 
       catA catB       numC       numD                   ts
25%     NaN  NaN   5.750000   6.250000                  NaN
50%     NaN  NaN  11.500000  12.000000                  NaN
75%     NaN  NaN  17.250000  17.750000                  NaN
count    24   24  24.000000  24.000000                   24
first   NaN  NaN        NaN        NaN  2000-01-03 00:00:00
freq     16    6        NaN        NaN                    1
last    NaN  NaN        NaN        NaN  2000-02-03 00:00:00
max     NaN  NaN  23.000000  23.500000                  NaN
mean    NaN  NaN  11.500000  12.000000                  NaN
min     NaN  NaN   0.000000   0.500000                  NaN
std     NaN  NaN   7.071068   7.071068                  NaN
top     foo    d        NaN        NaN  2000-01-31 00:00:00
unique    2    4        NaN        NaN                   24
```
It interleaved different type's output.Though the output index-order of describe() is not supposed to be guaranteed, i found it greatly convenient for interactive sessions.