Release 0.0.4.
Merge branch `release-0.0.4` into `master`.

Conflicts:
	package.json
Notes on file names.
Test file positions using abstract file positions.

In comparing files generated by Strata, do not use absolute file
positions. Use relative file positions instead. We use the file pages
currently stored as relative file positions, converting them to their
sort order index. When we serialize fixtures, we recalculate the file
positions based on their position in the serialized file.

Closes #126.
Remove `segement` prefix from file names.

Closes #127.
Utilities for an abstract fixture format.

Created an abstracted fixture format that is not bound to explicit file
identifiers and file positions. The abstracted fixture format records
the log entires of a leaf pages and the structure of the branch pages.
We still use file numbers for branch pages, but we normalize them for
comparison.

See #130.
Utility to convert current fixtures to new format.

Create a utility to convert existing fixtures to the new fixture format.
It references a `json` folder, which I've not checked in, into which
I'd copied all the existing fixtures.

See #130.
Convert all fixtures to new format.

Added leaf pages deletions to the fixture format and all the fixtures
utilities. Ran the conversion on all existing fixtures.

Closes #130.
Merge branch `fixtures` into `master`.
Even and odd numbers to distinguish page types.

Branch pages are even numbered and leaf pages are odd numbered. Required
changes to the allocation of page numbers. Also, in order to get one
test to pass, I'm now unshifting merge operations and split operations
onto the list of operations, instead of pushing them.

Merge order was reversed for `t/lock/purge.t.js` causing a different
tree outcome for the merges. Using `unshift` put the order back the way
it was. Then I used `unshift` for splits so's to be consistent.

This makes me want to find a way to make the balance even more
deterministic, sorting addresses, iterating over sorted lists of keys,
instead of using a `for...in` loop.

Some tests that measured the JSON size were adjusted.

In `t/proof`, we no longer negate leaf page addresses when writing them.

Closes #128.
Append position of last position array.

Append the position of the last position array to every entry in the
leaf page. This expedites the opening of a leaf page, no more scanning
backwards to find the last position array. It also means no more reading
backwards what-so-ever, so we can implement reading using streams.

Instead of writing out the position on the line outside of the JSON
record, I decided to write it as the last element of the JSON record.

The position can be found with a sip of the end of the file. A regular
expression can extract the final element of the JSON record. The JSON
record is always an array, so it is ordered, and the position is always
at the end.

Closes #125.
Closes #124.
Notes on jumping to position array.
Cleanup after fixture conversion.

Remove all of the fixture conversion test programs.

Closes #132.
Upgrade Proof to 0.0.35.

Closes #134.
Flatten positions array.

Closes #133.
Pass key into `rewriteLeaf`.

To begin to track the key of a leaf page in the positions entry, we need
to pass it into `writePositions`. `writePositions` is called in two
places, `rewriteLeaf` and `exorcise`. `writePositions` will eventually
accept an array that contains the key, or that is empty if there is no
key. This commit prepares the implementation of `writePositions` by
providing `writeLeaf` with the key.

See #135.
Notes on incremental page loading.
Notes on append only.
Convert `writeJSON` argument to object.

See #138.
Upgrade Proof to 0.0.36.

Closes #143.