workgroup provides a mechanism for controlling the lifetime
of a group of related goroutines (workers).
workgroup is distilled from similar ideas in Peter Bourgon's
github.com/oklog/oklog/pkg/group and Dave Cheney's github.com/pkg/life.
Run exectues each function registered with Add in its own goroutine.
Run blocks until each function has returned.
The first function to return will trigger the closure of the channel
passed to each function, who should in turn, return.