Will followup with testing in another PR. I'd like to plan out some reorganization of the current code and then attack testing in a strategic way. Your code coverage PR should be useful for this.
Not sure what "heavy handed" means in this context. Although this may be my Java roots showing, I think the factory pattern is well established in Python land as well. What's the upside of "stripping the OO stuff"?
@jcaplan please take a look, some substantial changes here would be great to get your input