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.
It's not obvious why scans are a special case here.  Couldn't the SQLCatalog just hand back the same result?

I could envision wanting to store temporary relations differently, so letting the sql module make the optimization decision makes some sense.