[WIP] Push work into SQL for Myria

This PR implements pushing part of a query plan into the MyriaQueryScan operator.

We do not always want this rule on, e.g., when we're testing specific parts of the optimizer. So we need the ability to flexibly disable it. @stechu 's technique of adding a new algebra per option seems unsustainable. So, I refactored a lot of the compile/optimize functionality to pass in arguments to the various *Algebra classes when getting their optimization rules.

* remove lots of unused code. Especially when the code had compile errors, I removed it with prejudice.
* add more types to the SQL alchemy module
* refactor compile/optimize as above
* add a type hierarchy to the *Algebra classes so that they all inherit from a common abstract class
* implement compiling trees to SQL, so that the highest part of a plan that will compile is used.
* make the pushing to SQL optional via a `**kwargs` parameter.

Outstanding issues:

- [x] no test cases
- [ ] how should fakedb implement a test? Right now, I just evaluate the subtree the SQL replaced, but this seems like a fail.
- [x] customize the dialect?