[WIP] 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:

- [ ] Multi-column grouper on By
- [ ] Fiddle with travis.ci to have a separate spark build/test

Would be good to see something in the doc string for this class that describes the purpose behind 'schema' (well, that seems obvious), and 'name' (not obvious to me)