proto.Key and proto.EncKey for better static type checking!

Moved engine.Key to proto.Key and introduced a new proto.EncKey to
differentiate between unencoded keys and encoded keys. All engine
interfaces (lowest level) expected proto.EncKey. Higher level interface,
such as storage.MVCCC and storage.DB accept proto.Key.

These are now custom gogoproto types in the .proto files.
Yep, result of merging two disparate implementations. I removed the less testy one.