- Client SDK will connect to a node, get node information and decide if
it needs to connect to a primary for writes, or pick a replica to
connect to for reads
- Updated service with a GetNodeInfo rpc call which returns information
about the node to enable the smart selection code in the sdks
- WAL package now can notify observers when it writes entries
- WAL can retrieve entries by sequence number
- WAL implements file retention management
- Add replication protocol defined using protobufs
- Implemented compression support for zstd and snappy
- State machine for replication added
- Batch management for streaming from the WAL