Push sql into myrial v2

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.

- add more types to the SQL alchemy module
- make the pushing to SQL optional via a **kwargs parameter.

Outstanding issues:

- [ ] how should fakedb implement a test? Right now, I just evaluate the subtree the SQL replaced, but this seems like a fail.
Can we add a test to verify that we don't push too much work into SQL?  For example, any join on non-partitioned data is not pushable.