Rename the sets to `Keys` and `Properties`.

* Rename `Keys` to `KeySet`.
* Rename `Properties` to `LimitedPropertiesMap`.
* Move `LimitedPropertiesMap` to `implementation`.

This highlights that there's dependencies on `LimitedPropertiesMap` everywhere, which should not be true. Will fix.
Rewrite the KeyTests to PropertyTests, and depend on the Properties interface in Key, not LimitedPropertyMap.
Hide constructors.