Initial Separation of stats from the geoms

** Noteworthy activity **
- stats are now in a separate directory
- each call to `geom_abc(stat='bin')` uses the specified `stat`
  this creates an object `geom._stat`.
- `stat.__radd__` creates and adds a `geom` to the ggplot object
- A proper implementation of `stat_bin2d` only constrained
  by the lack of `fill` mapping
- A `geom_histogram` is an alias of `geom_bar` and the bin
  computations are done in `stat_bin`
- `geom_vline` and `geom_hline` can plot multiple lines

** issues **
- `stats` are not computed on proper groups, so the plot may not
  be correct for some factorings.
- Related to the non existent `stat` grouping, any coloring is broken.
- Wrong test cases have been exposed but since the current results are
  also not purely correct the expected results have not been adjusted.
A few fixes from the review
Rename geom._groups to geom._units

It avoids a mix up with the real groups created
by the aesthetic mappings and the group parameter.
Clean up API

- Introduce `geom._extra_requires` to fill the gap between the
  required aesthetic and calculated stuff from the statistics.
- Remove the 'label' parameter where it was used, that is the
  job of gg_title. i.e ggplot level and not geom or layer level.
Lines -- slope and intercepts

ggplot2 line geoms seem to allow mapping to parameters!
A clearer view for these "mappable parameters" is to treat them
aesthetics in the geoms (users know they can map to them) and
as parameters in the stats (users discover they can assign functions
which compute on a specific column and yield the required result).
Add utility functions

- hijacked ggplot/utils/utils.py, it is a more obvious place for
  many small functions that are not specific to the ggplot object
Let smoothers return the x values

For some smoothers, the actual smoothing points are less than
the input data points. eg. lowess. The smoothers need to return
this information.

For consistency all smoothing functions are made to return the
x values.
Make stats accept a dataframe

- had to fix utils because of buggy behaviour in matplotlib
Use pandas create bins for stat_bin2d

- Although this is cleaner than the previous implementation, it turns
  out the real performance bottleneck is the plotting function for
  geom_rect -- ax.bar(). It is not meant to draw many small
  rectangles. The solution will be to use ax.fill_between for geom_rect
When geom aesthetics become stat parameters

In geom initialization, any argument that is both an aesthetic to
to the geom and a parameter setting to the stat is taken by the
stat if it is not an array-like. This is useful where the weight is
an aestetic for a geom, yet it is used during stat computation.
For this case, the problem was the API value for the weight is 1
(a scalar), yet it is also mappable. Although scalar weights are
essentially meaningless they do manipulate the y-scaling of histograms.

geoms abline, vline and hline can take functions to compute the slope
and intercepts. The functions are used by the respective stats.
Fix a bunch of missteps

- After computing the stats, sort dataframe by x, geoms expect it
  that way, and it is what ggplot2 does
- geom_bar, only set the xtick and xlabels for categorical data,
  prevents numbers with many decimals places
- stat_bin, fix for correctly determining the bins with zero counts
- stat_bin2d, add 'right' parameter
- stat_function, get rid of mapped 'y' value
- util.pop(), to pop dataframes and specify a default value
- six.string_types, fixes Python 3 not understanding unicode
Use GgplotError instead of Exception
Fix geom_bar separation distances

- categorical get spacing, num-likes don't
Fixes #286
Add tests for the stats

- Test that the right parameters are get to the stats for cases where
  those parameters are also geom aesthetics,
- Test all exceptions
Fix tests

- status warning for stat_bin2d
- changed tolenrance for some theme related tests
- swap in geom_line result images. Plots were different but correct
  though not failing.
Merge pull request #266 from has2k1/refactor-layers-like-ggplot2

 Refactor layers like ggplot2