[WIP] Push work into SQL for Myria

This is clearly not a rule we always want 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.