WIP: Add value_counts() to DataFrame

+ abstract bin generation from cut to use elsewhere. Panel goes to ndarray on
apply so that's a future TODO.

I'm relatively certain that this works, but I don't have explicit tests
for it. I'm hoping others who are interested (cough cough @rockg) will
be willing to create some of them. Key to test are that binning,
normalization and sorting all work correctly.

Will close #5377 when completed.