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
I could imagine cases where you want to deserialize something that isn't a RESTStorage object though - for instance a multipart encoded form.  I guess you need additional request data in order to make that work though - content-type + query parameters perhaps.  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?