1. The definition of filter() was incorrect.
2. More tests for filter() and partition().
1. Introduce getters for pairs and use them as method references.
2. Rearrange the order of methods in the map interface.
Factoring between different maps.  There is now a base class that implements the interface so we can share code between maps.  I moved many of methods into the base class.
Move keys() and keyValuePairs() to the base class.  Now AVL Trees get them for free.
Method containsKey() comes for free from the base class so we need not redefine it here.
Delete unnecessary method declarations.
Move map() and partition() from the subclasses (different maps) to the base class.
Move filter() from the subclasses (different maps) to the base class.