Add KeyVersionRegistry, and read/write support on Key.

### KeyVersionRegistry
* Registry for managing the available key version implementations.
* Enables the storage system to easily create a KeyVersion.Builder for a given type.
* Also maintains the protobuf extension registry (contains all the extensions declared by the key version protos).
* Registry and its accompanying RegisteredKeyVersion class are thread-safe.

I don't understand why you have core here. If it is unused why not delete it?