A class which can store mappings from Object keys to Collections of Object values.
Important methods are the add(K1, K2, V) and for adding a value
to/from the Collection associated with the key, and the get(K1, K2) method for
getting the Collection associated with a key.
The class is quite general, because on construction, it is possible to pass a MapFactory
which will be used to create the underlying map and a CollectionFactory which will
be used to create the Collections. Thus this class can be configured to act like a "HashSetValuedMap"
or a "ListValuedMap", or even a "HashSetValuedIdentityHashMap". The possibilities are endless!