pkg/api: Separation of concerns

pkg/api mixes several separate logical things.

New layout:

* pkg/apitools gets things like Encode, Decode, AddConversionFuncs, etc. Very sorry for the name, but we can improve upon it later; find-and-replace is much simpler than this separation was.
* pkg/api/validation gets all of the validating functions.
* pkg/api/common gets the old APIObject (the thingy that lets you safely embed an api object of type known only at runtime), renamed just "Object" and will in the future get a type "Unknown", which will safely pass-through api objects understood only by other binary components.
* pkg/api retains the internal types, and a file that registers them.

I added/extended doc comments in a few places to try and make this clear.

This PR will be a royal pain to keep rebased, so please deliberate quickly! :)