Added closeCollection().
Get refs on all colls before at start of Flush.
Use same colls throughout Flush/writeRoots().
Each rootNodeLoc has its own reclaimMark sentinel.

A single, global, shared reclaimable_node sentinel instance can
corrupt data as shown by the test
TestReclaimRootChainMultipleMutations().  The fix is to give each
rootNodeLoc its own reclaimMark sentinel node, so that when a
rootNodeLoc is fully dereferenced, it will only cleanup nodes with its
reclaimMark sentinel.

This might leave some nodes inefficiently un-reclaimed (until go
decides to GC), but safety/correctness is the top concern here.