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 feel like decoded could be outside of this object, or the object needs to be renamed - I don't see anything special about HTTP here, and in general io.ReadCloser is only tangentially related to HTTP.  Would make this more generic as an io stream watcher.  Also, wouldn't the person invoking this generally be responsible for closing the stream?  I.e. in a function that calls watcher:

    r := (some stream)
    defer r.Close()
    w := newStreamWatcher(r)
    for update := range w.ResultChan() {
    }

Maybe I'm missing why closing is a responsibility of the watcher here.