OK this one does all the things, it's just kind of obtuse
- interim - start breaking out materialized/non into two separate classes
finished moving it into two classes, removed cruft
- add an approach for handling extra options like innerjoin
- implement joinedload() in terms of new system