Sync pods asynchronously in the Kubelet.

This makes two main changes:
- Runs syncPod in a separate Go routine (and enforces only one of those
  runs at a time).
- Uses the pod list to determine if a container should be running or
  should be killed (used to use the output of syncPod).

Since Docker pulls are synchronized by the Docker daemon we still block
on that, but pods can now be removed and prepared for starting without
blocking on long pulls.
We don't support updates yet.  So just as a general approach... why not make each pod a go routine with a channel of instructions to it?  Seems like sync is checking current state against expected, and sync wants to ensure that pods get a linear sequence of operations.  But if a kill is in progress, seems like you want to queue expected behavior on it or potentially cancel a new create.