Following the discussion in #1421, we agreed that we should expect no duplicate root slots handed over from the runtime.
Some policies like mark sweep do not mark objects atomically and may result in an object being scanned multiple times. For those policies, duplicate slots are allowed. But for other policies, we also should not see duplicate slots.
We currently have checks for duplicated slots when extreme_assertions is enabled, which checks all the slots (including root slots, and slots from scanned objects). We should change those checks to only check root slots. We also have may_trace_duplicate_edges for plans like mark sweep. We should remove those plan constraints, and move the duplicate slots check to the policy.