Throttler fills the gap between sync.WaitGroup and manually monitoring your
goroutines with channels. The API is almost identical to Wait Groups, but it
allows you to set a max number of workers that can be running simultaneously. It
uses channels internally to block until a job completes by calling Done() or
until all jobs have been completed. It also provides a built in error channel
that captures your goroutine errors and provides access to them as []error after
you exit the loop.