Our WaitGroup.Add() call might happen after some WaitGroup.Done() calls done
by the controller, so make sure that doesn't happen by doing the Add() calls
before letting the controller run.
--- FAIL: TestUpdate (2.00s)
panic: sync: WaitGroup is reused before previous Wait has returned [recovered]
panic: sync: WaitGroup is reused before previous Wait has returned
A lot of packages use StringSet, but they don't use anything else from
the util package. Moving StringSet into another package will shrink
their dependency trees significantly.