Decouple apiserver from codec implementation

The apiserver on initialization must be provided with a codec for encoding
and decoding all handled objects including api.Status and api.ServerOp.  In
addition, RESTStorage objects may now optionally implement Extract() or
instead rely on the codec to decode for them.

NOTE: Only the last commit is new, the other commit is in #806
> Should we reject posts/puts to version v1beta1 that have kind v1beta2? If so, then I think it is codec per version. 

Hm, I'm OK if the codec is "nice" and accepts multiple versions as input, but its output should *always* be of the version it is registered as.

> eventually we have codec per version per serialization format.

Agree, but let's worry about it when we add gob or whatever. :)