Protobuf writing/reading support on KeyVersions.

## Basic Concepts:
* After you create a KeyVersion you can protobuf it by doing kv.buildData().
* You can restore the KeyVersion by doing new KV.Builder().withData(protobuf).build().
* All KeyVersion sub-classes must conform to this paradigm.
* Internally, KeyVersions generate a "core" protobuf which is part of the "data" protobuf. The "data" proto holds ALL the fields needed to persist the KV, while the "core" contains ONLY the fields that will be hashed to obtain the key version ID. The raw bytes of the core will be fixed once it is generated and persisted.

## Summary of Changes:
* Added protocol buffer definitions.
* Removed all placeholders (don't need them any more).
* Moved KeyVersionBuilder to KeyVersion.Builder.
* Added methods on KeyVersion and Builder for sub-classes to override.
* Modified HMACKeyVersion and AESKeyVersion to override these methods and conform to the structure.
* Added input checks on the Builders.
I changed padding to an enum so that it would be easier to convert between the internal field and the protobuf. This also meant that the enum in AESKeyVersion would not have the "padding" postfix needed in the JCE declaration, so I compensated for it here.

If you think we should stick with a String for padding, I'll change it back, but I'll need to make other changes to make it work.