Merge branch pages.

Implemented the merge of branch pages using the generalized merge
algorithm that, with some specializations, also merges leaf pages.

Implemented a function named `chooseBranchesToMerge` that tests whether
a branch page can be merged with a sibling after a descendant has been
merged into its sibling and a child address removed from the branch
page. This function descends to the branch page to test, then uses the
`lesser` and `greater` properties of the `Descent` class to find the
left and right siblings. If the branch page can match with either
sibling, it then invokes `mergeBranches`.

The `lesser` and `greater` of `Descent` properties were broken. They
were being captured after the `depth` was increased but before the next
descent, giving a depth that was off by one. After capturing those
properties in a fork, their indexes were not being adjusted to send them
down the lesser or greater path. Both issues have been corrected.

The `mergeBranches` function is implemented using the generalized
`mergePages` function.

Closes #8.
Merge branch `merge-branch` into `balance`.
Gather more than one page for the balance plan.

Fixed logic in the balancer that gathers of pages where the planning
step was called prematurely when it was the case that a gathered page
had a right sibling. At this point the existing tests are only ever
considering one leaf page during a balance, so this rather bug has never
been exercised.
Fix `found` to never test first child.

Fixed functions built by the `found` descent stopper function builder so
that they will never test for the sought key when the current index is
zero.

The `found` descent stopper stops when the we've reached the branch page
that contains a given key. This function must be used with the `key`
navigation function because it assumes that if the key is found in the
branch page, it will be at the index resolved by the navigation
function. Because the `key` navigation function will cache the key in
the cache of the branch page, the key is read directly from the cache.
We do not need to look it up.

We do not want to perform the `found` test when the index resolved by
the `key` function is zero. This indicates the first child, which is
really the left node of the first key, the key associated with the
second child. We do not read a key into the cache for the first child.

Because there is no key in the cache, the `found` function was comparing
`undefined` to the key sought and the comparator function used in our
tests, which as not designed to accommodate `undefined`, was incorrectly
returning `true` causing a descent to stop whenever it had to go to the
far left child.

We've fixed this by having the `found` function return false if the
current `index` is `0`.
Fixed branch merge choice when nothing is chosen.

The branch page merge choice function `chooseBranchesToMerge` was not
invoking the provided `callback` function when it couldn't find a pair
of branch pages to merge.
Implement fill root.

Implemented the merge operation that fills the root when merges have
made it so that the root has only one child and that child is a branch
page. In essence, we promote the only branch page child to root.

The fill root operation replaces the only child of the root with the
children of the only child. The only child is then unlinked.

The fill root operation is the operation that decreases the height of
the b-tree.

Closes #7.
Merge branch `fill-root` into `balance`.
Merge branch `balance` into `master`.
Implement cache purge.

Pages are purged from the cache in attempt to reduce the JSON size of
the b-tree. JSON size is an arbitrary measure of in memory heft based on
the length of the JSON strings that represent the loaded references and
objects.

If a page is not locked, but it is held by the balancer, it will not be
removed from the cache, but the page object will be reset to an unloaded
state; references and cached keys or records are discarded.

Added cache purge tests to some of the tests in the `t/basics`
directory.

Removed the `stats` property from the public `Strata` object. Replaced
it with a `size` property and a `nextAddress` property. The exposure
`nextAddress` property is dubious. It is only used in testing.
Merge branch `purge` into `travis-ci`.

Conflicts:
	index.js