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.
I looked internally and bytes slices are copied during decode, so I've changed this code to do the same.