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())
That's because on DataFrame, it simply recursively calls on each of its Series. I just moved all the type-selection logic in a single place at the beginning (thanks to the existance of select_dtype)