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

copy-paste.  Fixed