add numerous asserts for catching fatal errors closer to source.
don't init sqlalchemy objects
add support for back_populates
docstring