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())
but of course it calls the rest of the function when calling describe on the individual columns. But still, I think you can put the percentiles processing part before this, so the conversion of percentile_width to percentiles has to happen only once