[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've slightly expanded the docstring in a recent commit.  Some of the explanation isn't appropriate for there though.  I'll list it here:

Having a name serves two purposes:

1.  It disambiguates between multiple tables with the same schema.  Imagine trying to join two account books.
2.  It gives us something to print.  TableExprs now print in a way that's pleasing, legible, and comprehensible.