Tweak causal dict to enable better GC.

Rather than representing the set of dominated edits using a range, instead use a
normal collection. We can then apply RSE to reclaim from the collection when
tuples appear in safe_log; that is, once an entry is (a) safe (b) dominated, we
can discard it from BOTH safe_log and dominated.

Note that the current implementation means that we create two separate range
collections to represent the set of all insert IDs ever -- one is explicit in
the user program ("safe"), and the other is created by RSE. It would be nice to
avoid needing to use the former (explicitly) in the user's program; failing
that, we could improve the RSE analysis to look for such a manually created key
collection and use that, instead of creating a redundant collection.