make watch actually return an error when there's an error

Two things to fix #1310 even harder


----- Original Message -----
> >  func (w *etcdWatcher) etcdWatch(client EtcdGetSet, key string,
> >  resourceVersion uint64) {
> >  	defer util.HandleCrash()
> >  	defer close(w.etcdCallEnded)
> > +	go func() {
> > +		// This is racy; assume that Watch will fail within 100ms if it is going
> > to fail.
> > +		// It's still more useful than blocking until the first result shows up.
> > +		// Trying to detect the 401: watch window expired error.
> > +		<-time.After(watchWaitDuration)
> > +		w.immediateError <- nil
> 
> Yeah, I'm convinced--if you have a preference for this, I can make it happen.
> Can I do it in a subsequent PR, though? This one at least prevents a nasty
> errorloop.

Absolutely.