Use config sources for Kubelet, switch to podFullName

As discussed in #297 and also a side discussion about abstracting the Kubelet from being directly dependent on etcd, start refactoring config service to decouple sources of config from sync loop and switch from Manifest.ID -> Pod Full Name in the Kubelet.

Simplifies the Kubelet Run() step by requiring configuration to be defined up front, and an update channel passed into the Kubelet.
The loop state needs to be hidden from the caller, but a panic doesn't need to reset the loop state (if you panic, you can still resync from the latest index.  However, resetting back to 0 isn't terrible.  I think I'm ok with resetting state, although doing so makes this a Run method rather than a constructor for a source of updates.  Maybe this should just become something like 

    go util.Forever(func() { ListenEtcdConfig(....) }, 0)