Make the RekordMatcher constructor private.
Rekords can be nested.
Test the Rekord::get method explicitly, especially for supertypes.
Delegate value retrieval to the key.
Check that the key returns null if the property map does not contain a value corresponding to that key.
Rearrange methods in Key.
Reimplement Rekord::containsKey in the Key itself.
Separate the Key interface and implementation.
Ignore warning on Matchers.containsInAnyOrder.
Allow the key and the value to be in any order.
Wrap the persistent hash map in a Properties class.
Move Rekord null checks to the Properties class.
Remove extraneous dots.
Leave checking whether the property exists to the Rekord/Properties classes.
Merge OrdinaryKey and NamedKey again.
Use a private rekord type for testing the NamedKey to avoid mixups later.
Have the keys construct Property objects to wrap key/value pairs.
Perform null checks in the Property constructor.
Implement a defaulted key.
Split out the NamedKey property retrieval into a PropertyKey class.