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.
Implement Truncate() in file-like implementations.

gkvlite's file interface recently added the Truncate() method, in
order to be able to revert gkvlite files to previous states, and so we
need to implement it here.