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.  Thinking forward though, eventually we have codec per version per serialization format.  Perhaps we want to pass in a codec when we install handlers:

```
server := apiserver.New(storage)
mux.Handle("api/v1beta1", server.HandlerFor(codecV1beta1))
mux.Handle("api/v1beta2", server.HandlerFor(codecV2beta1))
server.InstallSupportHandlers(mux)
```