Add a free-form summary function to describe a dataframe (in the vein of R)
First cut. Please let me know your thoughts and thanks again to @jreback for teaching me.

Looks like this 

```
                A_cat            B_str                C_bool           D_num  \
0            count=24         count=24              count=24        count=24   
1       cardinality=2    cardinality=4              mean=0.5         mean=12   
2  value:foo=16 (67%)  value:d=6 (25%)             std=0.511        std=7.07   
3   value:bar=8 (33%)  value:b=6 (25%)         min:p47=False         min=0.5   
4                      value:c=6 (25%)           median=True        p25=6.25   
5                      value:a=6 (25%)          p53:max=True       median=12   
6                                              cardinality=2        p75=17.8   
7                                        value:True=12 (50%)        max=23.5   
8                                       value:False=12 (50%)  cardinality=24   

          E_regular  
0          count=24  
1         mean=4.17  
2          std=3.14  
3         min:p65=2  
4         p70:p82=8  
5         p87:max=9  
6     cardinality=3  
7  value:2=16 (67%)  
8                    
```

for input

```
df = pd.DataFrame({'A_cat': pd.Categorical(['foo', 'foo', 'bar'] * 8),
                        'B_str': ['a', 'b', 'c', 'd'] * 6,
                        'C_bool': [True] * 12 + [False] * 12,
                        'D_num': np.arange(24.) + .5,
                        'E_regular': [9,8,2,2,2,2]*4,
                        })
```
- [ ] closes #12460
