Flush() must write the 'snapshot'ed rootNodeLoc's.

Before this commit, there was a race/hole... imagine a Flush() is
started and items+nodes are written to disk.  But, before the
final/tail root records are written, a concurrent mutator sneaks in to
change the items+nodes (there's new treap roots).  When the Flush()
then tries to write the final/tail root records, it was incorrectly
writing dirty (unpersisted) items+nodes.

This fix uses "snapshotted" rootNodeLoc all the way throughout the
Flush() so that a concurrent mutator's changes are not seen.