Introduce StandardStore, similar to the The One Ring, a store to rule them all.

StandardStore implements and coordinates the infrastructure of being a store,
startup/shutdown logic and a common base interface for all stores. It takes as
input a store-specific format specification (StoreFormat), which describes how
to read and write records and any store headers.

The Store provides a cursor to navigate records, which may be augmented by the
StoreFormat to provide non-standard operations, like reading record fields
directly as opposed to deserializing full records.

This commit contains two store format implementations, NodeStoreFormat and
RelationshipStoreFormat.

The new stores are not plugged in, and so this commit does not change any live
part of the code base. It is meant as a first step, and a pause point to peer
review the current state of the code.

Remaining work, in proposed order:

o Plug new stores in to run side-by-side with existing stores, with existing
  stores remaining in charge of startup/shutdown procedures.
o Implement RecordTraversalLogic for expand() operation
o Implement all other store formats
o Move all code over to use new stores
o Make new stores responsbile for startup/shutdown and similar infrastructure
o Remove old stores.
Make sure that the StandardStore truncates the store file before mapping it with the page cache.

Also some assorted formatting changes that crept in.
Merge pull request #2982 from jakewins/2.2-standardstore

[2.2] Introduce StandardStore, similar to the The One Ring, a store to rule them all.