Add a util.Forever variant that ends on a stop channel

Integration tests that want to run controllers today are putting controllers into
infinite loops with go util.Forever.  util.Until will allow test cases to stop a controller
after a test ends
So return an interface that can be stopped?  Since Until is usually in a goroutine, you'd end up having to pass that object back out via some mechanism, so I don't know how that would work.  Or are you envisioning a different use case?

Normative

```
func Run() {
  go util.Until(func() { // almost forever }, 0, stop)
}
```


----- Original Message -----
> > @@ -51,7 +51,19 @@ func HandleCrash() {
> >  
> >  // Forever loops forever running f every d.  Catches any panics, and keeps
> >  going.
> >  func Forever(f func(), period time.Duration) {
> > +	Until(f, period, nil)
> > +}
> > +
> > +// Until loops until stop channel is closed, running f every d.
> > +// Catches any panics, and keeps going. f may not be invoked if
> > +// stop channel is already closed.
> > +func Until(f func(), period time.Duration, stopCh <-chan struct{}) {
> 
> I would love it if you made the syntax to use this work like ```defer
> util.Until(f, d).Stop()```
> 
> ---
> Reply to this email directly or view it on GitHub:
> https://github.com/GoogleCloudPlatform/kubernetes/pull/2661/files#r21135539