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.
Due to my rampant use of copy/paste, some of this code is now redundant with raco/dbconn.py.  Conceptually, I feel like there are two separate modules lurking in here:

1) An interface for managing tables in a SQL database.  raco/dbconn.py is my attempt to capture this logic
2) A module for translating raco.algebra operator trees into SQL statements.

The catalog as written encompasses both of these; perhaps its role should be downgraded to the second use case.  dbconn.py could be enhanced to implement the Catalog "interface" -- I think it's only missing the num_servers method.