Scalar Expressions

See major issue #281 

Introduces a new scalar expression system.  Now instead of `Add`, `Mul`, `sin`, `exp` being of type `ColumnWise` they are now of type `ScalarExpr`.  `ColumnWise` has graduated from being  an abstract class to a concrete one which contains a scalar expr and a sequence of columnar arguments.  

Along with this comes some efficiencies.  

1.  Python streaming split-apply-combine is now able to handle much more general problems (although I think we actually could have managed this without this change).  
2.  This will also be essential for non-trivial Spark solutions.
3.  This will make a transition to array exprs simpler
4.  There was some nice refactoring along the way.

I'm also breaking the TableSymbol interface in this PR.  TableSymbols now carry an identifier / name.  E.g.

```Python
# old
accounts = TableSymbol('{name: string, balance: int}')

# new
accounts = TableSymbol('accounts', '{name: string, balance: int}')
```