map: Allow deletion during traversal

This is done by keeping a list of pending keys to be deleted. When
traversal completes, we clear the traversal flag and delete each key
in the pending deletion list.

We cannot currently store nodes in the pending deletion list, since all
map node references become invalid when deletion occurs. (The swapping
of two nodes is done by value only, and so references to that node
for the purpose of its key/data pair, as opposed to tree structure,
will no longer point to the node they expect.)