Empty KeyedCollection base class.
Rename KeyedCollection to AbstractMap.
Document and refine methods.
Subclass interface default implementation.
Fields and constructor.
Remove hints so subclasses can change item class.
Define getClassUnderTest() method.

This method in the AbstractMapTest will make it easier to create
test cases to cover AbstractMap subclasses.
Initial add() implementation.

Right now, we're only validating that $item is the correct class.
Initial AccountCollection class.
getOrCreate() requires a non-empty string.
getItemClass() method.
getOrCreate() returns instance of correct class.
createInstanceUnderTest() helper.
New instances set their key correctly.
DuplicateKeyException.
Adding the same item twice works.

It shouldn't throw an exception.
add() implementation.
Merge branch 'account-collection'