Simplify file service.

Instead of having worker goroutines, we use a channel as a semaphore to
limit the number of concurrent requests for the file service, but
perform all the work synchronously.
Dynamically start workers in periodically.

This brings an idle cbgb down from somewhere approaching 90 goroutines
to under 20.