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.

Closes #35.
Closes #12.
Merge branch `purge` into `master`.
Remove `.npmignore`. Tidy `.gitignore`.

Removed `.npmignore` because Strata is now pure JavaScript library with
no compilation steps.

Updated `.gitignore` to ignore files that are generated by project
development, but not to ignore the files specific to my software and
platform preferences. Those are best ignored via global settings.

Closes #45.
Merge branch `tidy` into `master`.
Fix indent.

Closes #49.
Use `in` instead of `Object.keys`.

Use `for` key `in` object instead of `Object.keys` in the `plan`
function of the `Balancer`. Tidier.
Document intent of balancer planning.

Not implemented yet, but added Docco to describe how the balancer
planning is supposed to work. Currently, the planner will combine more
than two pages into a merge if they will fit. I want to do them two at a
time, checking to see if further balance is possible in a subsequent
balancer.
Extract ghost leaf manipulation to `exorcise`.

Extracted the portion of `deleteGhost` that shifts the ghost and writes
the new position array to the leaf page file into its own function. This
function will be called from `mergeLeaves` when a ghost is present in
the left leaf page of the merge.
Rename `unlink` to `terminate`.

Renamed the `unlink` function which only breaks the right link to
`terminate`. Created a new `unlink` that breaks both the left and right
links of the given node.

Note that this is the linked list of candidate leaf pages, not the leaf
pages themselves. There is another `link` and `_unlink` pair for the
pages used to maintain the most-recently used list for the cache.
Merge away ghosts, merge two at time.

Merge leaf pages two at a time. Undo the previous logic which tried to
fit as many leaf pages as possible into a merge. This is in accordance
with the direction I took for branch balancing; the branch balancing
logic expects to balance the removal of only a single node at time.
Closes #60.

Instead of first deleting a ghost in the left leaf page of a leaf page
merge in a separate balance operation, ghost deletions in the left leaf
page of a leaf page merge now take place in the leaf page merge
operation. This closes #56.

Fixed a bug in `mergePages` where the penultimate branch page was being
written as the pending semaphore, instead of the carefully selected
`ancestor` page.
Merge branch `merge-ghosts` into `master`.
Fix purge while balancing, load leaf page length.

Fixed an endless loop in the `purge` method of the `Strata` object
closing #62.

Resetting the length property of the leaf page object to zero before
reading a leaf page. If the leaf page is being used by the balancer, its
data can be purged, but it's meta data is retained. Therefore, load leaf
page can be called to reload the positions array with the length already
set to the correct value, causing the load to double the length recorded
in the leaf page.

Ugh. I sense a race condition. The `readLeaf` performs asynchronous file
system reads, so a balancer could take over and calculate a balance
based on incorrect sizes; the length may be zero because it has been
reset and has not yet been reloaded.

Actually, why do we need to use the most-recently used list as storage
for meta data? Can't we just put that in the linked list used by the
balancer to choose splits and merge pairs?

Closes #47.
Merge branch `purge-balancer` into `master`.
Whitespace tidy.

Closes #61.
Remove a superfluous variable from `readLeaf`.

Removed a superfluous `path` variable from `readLeaf`.
Remove `length` property from `page`.

Removed the `length` property from the `page` object. This was a
property cached as meta data so that the balancer could reference it as
meta data, should the cache entry's actual data get purged.

See #63.
Store meta data in balancer data structures.

The balancer now caches the meta data it needs into the linked list
structure it uses to plan splits and merges.

Closes #63.

There is no longer a separate `length` property in the cache entry, so
we do not need to assert that they are in sync.

Closes #54.
Remove Cadence as development dependency.

Don't need it yet. Will probably export it through Proof.

Closes #52.
Remove empty object argument to `report` function.

Removed the empty object argument to `report` function of the tracer.

Closes #55.
Merge branch `simplify-cache` into `master`.