commands/prune: limit concurrency of goroutines
commands/prune: limit concurrency of goroutines

Any time we start a ref scanner from the prune package, we consume at
least two processes and multiple pipes per process for the standard
streams. When running many of these ref scanners in parallel, we can
spawn a large number of processes and run the program or system out of
file descriptors quite easily.

Use a semaphore to limit the number of ref scans to twice the number of
CPUs by acquiring the semaphore before each scan and releasing it
afterwards.

github/git-lfs,github/git-lfs,github/git-lfs