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
> Are there RESTStorage objects that should be able to accept multiple types of resources, or should we say that to do that you'd implement a new resource anyway?

Hm, I'm not sure. Seems like it might be reasonable, but I would vote to defer making a RESTExtractor until we have such an object.