Refactored everything to use new classes; factored out from_api_row;

Partial re-factor, but this is good enough for a start.  next pull request will have as much of __init__ removed from the sub-classes as possible.
these args used to be required and now they're not. is this intentional?