two major changes: - replace the visitor fold with an explict crc check. - rewrite all folds in terms a new large file fold function that adaptively prefetches (and jumps around when prefetching is the wrong thing to do) data so that we're operating on larger chunks of data, instead of doing a large number of small reads.
Evan found a failing QuickCheck + PULSE test case that causes a fold to fail when racing with a merge. The race appears to be very difficult to trigger via QC + PULSE, alas, even when tweaking the operation weights to get more puts + folds + merge operations to happen on average. My proposed fix is to move the call to `purge_setuid_files/1` to the `init_keydir()` function. `init_keydir()` knows if we're opening the keydir for the first time (`not_ready` or not), so purge the stale setuid files only in the `not_ready` case.
defaults to call the unit tests twice, once for each io_mode.