Etcd watcher

Building on previous PRs, this implements etcd's watch in a form that I can hook up to the apiserver. Only the latest commit is unique to this PR.
I will move this to the watch package as a general io.ReadCloser watcher, good point.

The reason I close here is that closing shouldn't be done until the consumer of this watch is finished watching, and the consumer might be completely different from the creator of this watch. (The consumer implicitly wants a close when they call Done(); the close is a signal to the source of the watch that the consumer is done). I'll add a comment explaining this.