last_commit_ids processing, we should run N
git log commands in parallel. We may want to require minimum number of files/dirs before running in parallel if there is significant enough overhead in spinning up new threads. (See runtests.py for an example of a threadpool running external commands)
This will largely remove the benefit of the current iterative approach, which can short-circuit some commands if files/dirs have the same last commit. We can try to keep some of it, though, for cases where the parallelism is less than the total number of files/dirs.