A strategy for writing objects to and reading objects from streams. Implementations
must be safe for concurrent use by multiple threads.
If an implementation will be used for snapshots, it must be able to write and read the prevalent system it will be used with, but does not need to be able to write or read any other objects. If an implementation will be used for journals, it must be able to write and read any transactions it will be used with, but does not need to be able to write or read any other objects.