Refactor NeoStoreDataSource into modules, with clear dependencies (external and internal), and introduce Recovery,LogRotation, and LogPruning as separate processes.

The recovery process now works on its own channel to the underlying logs, so there is no longer any assumption that after recovery PhysicalLogicalLog can continue with the same channel. Instead it opens its own channel and moves to the end.
At the end of recovery, the log is truncated at the last properly read transaction, to cut off any scrambled transactions due to killed processes.

UpdateableSchemaState and its implementation didn't have anything to do with IAGD, so it was moved into NSDS.

Log pruning is now a separate process, that uses monitor callbacks to trigger when to run.
Log rotation extracted into its own process.
Merge pull request #3548 from rickardoberg/nsdsrefactoring

Refactor NeoStoreDataSource