Allow client and server to vary the versions they accept

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