add WaitGroup feature.

WaitGroup waits for a collection of goroutines to finish.  The main goroutine
calls ``add`` to set the number of goroutines to wait for. Then each of the
goroutines  runs and calls Done when finished.  At the same time, ``wait`` can
be used to block until all goroutines have finished.