Fill out Spark implementation

This builds on the scalar-expr refactor #319 to fill out the spark backend. 

We add

* Reductions (min, max, sum, count, nunique, any, all, ...)
* A unified system around the rowwise operations (Projection, Column, Map)
* A clean split-apply-combine that works with much more general arguments
* Various small operations like head and sort
* Significant amounts of testing against the Python backend

TODO:

- [x] Multi-column grouper on By
- [ ] Fiddle with travis.ci to have a separate spark build/test

Yeah, `multipledispatch` doesn't handle docstrings well.  It's unclear where you would put them, what to do with multiple conflicting docstrings, etc....  Suggestions welcome.