SHAMap performance (RIPD-434)

Commit from previous pull request with updates thanks to suggestions given in that pull requests. Updates and bugfixes to address the missing node bugs:

More separation between snapshot unsharing logic and modified node flushing logic.

Simplify descend* functions so that they no longer modify SHAMapNodeIDs. (They were too tricky to use because it wasn't clear which functions modified SHAMapNodeIDs and whether you were supposed to pass the parent or child ID.0


If you're modifying a SHAMap, you must own it. So no locks are needed. (Nor would any do any good. Other code would arbitrarily get data before you modified it or after, which would make no sense.)

On the other hand, a SHAMap can be logically immutable and shared but nevertheless not be fully resident in memory or fully hooked up. So we may need to add new pointers to the mChildren array as nodes are read in and hooked up.