The S3 GC must not delete blobs added while the GC is running.
In order to do this efficiently, we invert the logic of the previous mark and sweep algorithm.
Previously, we were creating a "marked" set of all blobs in the repository, then iterating over S3 and removing all blobs not "marked".
The new algorithm creates a "toDelete" set of all blobs in S3 candidate for removal, then iterates over the repository to subtract from that set the blobs actually used. What remains in "toDelete" is the blobs we delete from S3.