Decode/Encode everywhere

Necessary for Brendan's upcoming api versioning PR. This is a fixed version of #567.

All types stored in etcd are now API objects.
>This means I made an api.ContainerManifestList, and added a JSONBase to endpoints (and changed Name to JSONBase.ID).
I think this change+brendan's other change may be appropriate for the (hopefully) last ever breakage of kubelets. This is because together they add versioning to etcd, which is the thing that one ideally needs to solve exactly this kind of problem. What do you guys think?

Versioning the keyspace in etcd is not a bad idea and probably the easiest way to fix this, but then we'll have weird things like storing a version both in the path and in all the objects we store, which I'm not sure we want.