POC: [NX-496] Component metadata api

https://issues.sonatype.org/browse/NX-496
It keeps an in-memory record of the "registered" types, and provides a way for implementations to prepare for storing that type of metadata. For example, the KZ impl will check if the schema exists, and if not, will create it. It is expected that components of NX that define new metadata types are responsible for registering them with this early in their lifecycle. Attempting to store/retrieve data of a type that isn't registered will result in a runtime exception.