Rewrite ListFrontierDirectoriesInRevisions in Rust
And make it shard its output to avoid wasting time on synchronization, like compute-directory-frontier.
Includes commits from !418 (merged) (because this is mostly the same code, with different predicates)