first stab at computed fields

The idea is to have uniform access to plugin-provided (computed) fields of
items and albums. This also permits queries over these computed fields.
collapse model base classes

The artificial separation was hurting legibility/maintainability more than it
was helping.
enable queries over computed attributes

This makes containment (field in obj) work with all attributes even though
other dict-like methods for iterating over the object don't expose computed
fields by default. I think this is the right compromise to avoid accidental
eager evaluation of computed fields.
new Model.add() method

This will replace most of the functionality of Library.add and
Library.add_album, completing the set of CRUD methods available on Model
classes.