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
Ah, I see that the problem with using latest.Version is that the server might be on an old version. I guess eventually we'll want the client to present the server with a list of understood versions and the server can give us the most recent one it understands?