Proposal: v1beta3 API overhaul

Speculative change for some items from #1200:

* Metadata that applies to resources is split from APIMetadata on non-resource API objects
* Metadata is a sub field of objects
* Labels are on Metadata
* Pod current and desired state is split
* Name is used for pods instead of ID (UID is part of metadata, Name is part of resource) for idempotent creation #148 and #1216 
* PodTemplate is a Metadata carrying object as per #170
 * If replicationController gave way to a generic "replicator", then pod template could be both a nested struct and a real resource.
* A ScheduledPod and ScheduledPodList is what the kubelet sees as per #860
* Non-schema'd k/v values on Metadata as `Config` (better names welcome) as per #1201

Not changed yet:

* ReplicationControllers
* Services

EDIT: Moving to higher bandwidth document here: https://docs.google.com/document/d/1E_HNsbyocweD9zJHXbz5Xb9XPwBqvDnLHhGeBq15FlI/edit?usp=sharing
The implementation currently uses a global counter. Its value is recorded in each object when that object is mutated. Because the value is global, it can be used to both determine whether another copy of a particular object is more or less recent than your copy, by comparing their recorded counter versions, and it can be used to filter events upon reconnection via watch (equivalently, this could be viewed as the sequence point in the stream at which you want to resume), as well as for mutation preconditions, which just require that the values match.

However, in the future, we expect we may well shard by resource kind and/or namespace, in which case the counter value could be used for watch filtering only for a particular resource kind for a particular namespace, which should work for most user-initiated watch operations.

A consequence of making the values opaque (so that we don't need to specify the format), is that system extensions, such as the scheduler, which will cache large amounts of state, will need to rely upon the apiserver to never return inconsistent state. Therefore, even GET will need a precondition to specify not to return state older than the provided resourceVersion (equal or newer is fine). In the case that Watch cannot resume successfully from the provided resource version, the client still needs to be protected from "going back in time".