Calculate block checksums in parallel.

This will calculate checksums of a file using n threads where n is the
number of CPUs you have.

This is a poor implementation however because:
 - Threads are started & stopped for every file.
 - Checksums for all blocks in a file must be calculated before the next
   file can be started.
 - Locks are used more heavily than strictly necessary.

It is also only lightly tested.