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())
This is originally a side effect of the refactoring (the way i sort out 
the index on the general case). It changed the previously generated index 
order, but had the advantage of keeping the order similar whatever the 
types (e.g.. no more "# when mix of dateimte / obj the index gets 
reordered."), and consistent with the docstring, which i saw as an advantage.
It was my feeling that the previous order was arbitrary, so i decided to made that 
change as it.

If you think preserving this row order is necessary, i guess i could add some additional 
logic for that case.