Allow client and server to vary the API versions they use

Handles storage version setting on apiserver, and client version
specification.  Uses the appropriate codec for the version specified.

Open problem: needs to merge data when PUT uses an older version

Only the last two commits are new
We should make a VersionToCodec map in latest so that no one has to write this switch statement.