The problem is that trees were previously stored with their contents as a dict
keyed by each item (subtree or blob)'s object_id. This doesn't allow for the
case where a tree contains two identical objects with different names, as when
one creates a tag in SVN, for example. The refactoring stores a list of
subobjects in the Tree object instead, with object_id and name as attributes.
The other changes are consequences of this refactoring.