Remove internal forks from `Descent`.

Instead of tracking the page to the lesser and greater siblings using a
forked descent, track the address of the page where the paths diverge.
When we want to find the siblings, we create a new descent that follows
the key to the page where the paths diverge, then take the path to the
sibling.

We want it to be the case that each descent holds onto a one page locked
page to simplify cleanup on errors. With the forked descents we're
saying that a descent holds one or more locks and we have to have a
special dispose function to dispose of the greater and lesser forks.

Closes #272.