No more dataframe.groupby().apply()

Pandas calls the function two times on the first grouped dataframe.
This was making it hard to debug, and in cases where the function
calls code that also does a `dataframe.groupby().apply` the
extra calls multiply.

The solution is to do this with a `groupby_apply` utility
function that splits-applys-combines in a straightforward way.
Update geom_bar, plus do breaks and labels

- `geom_bar` uses the `geom_rect.draw` method and for now will inherit,
  `geom_rect`. It may be best to make all the draw methods static, so
  that inheritances (& mixins) aren't used except for the much more
  closely related geoms.

- Handle the breaks and labels, allowing for matplotlib to take care
  of this task automatically if non have been directly set by the user
  or as a result of the manipulations in preparing the plot.