It needs to be buffered or the goroutine will block trying to send an error (or nil) to errc.  Since we may return early, we may not wait for all goroutines to finish.  Having a buffered channel allows for the errors to come in and be ignored if we want without risk of hanging a goroutine.

See [Control Variance IV](http://go-talks.appspot.com/github.com/dsymonds/talks/2013-may-io/hpwa.slide#23) for a sample.

An alternative could be that we wait for all the goroutines to finish or we spin up another goroutine to listen for their answers (and then die) so that we can return.  Buffering is the simplest solution.