[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

Yeah, it was clear that it was going to be very difficult to do the Spark work with Exprs as they were set up.  This is what was behind some of the frustration you were having I think.  The real solution was to fix the Python layer which required fixing Exprs.  

Having larger scalar expressions makes it easier to build functions rather than manipulate the sequences directly. The Python layer is now much improved itself and the Spark layer is much more able to reuse work from the Python layer.