[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

I don't understand why it's necessary to differentiate between py2/3 here. If you see this as something that will persist, I think you will want a lot of explanation here.