Expose CopyCat cluster via CopyCatContext API.
Support configurable read/write quorum sizes.
Add event handlers for cluster, log, election, state, and state machine events.
Refactor internal APIs to separate election, state, and replication.
Initialize replica indices to last log index.
Add basic election tests and bug fixes.
Make append entries handler synchronous.
Don't begin pinging cluster members until leader has written snapshot to logs.
Ensure replica futures are not overwritten during pings.
Clean up logging.
Sort replicas in a separate list when determining the commit index.
Allow replicas to provide last log index information for failed AppendEntries requests.
Fix various bugs throughout.
Prevent thread from blocking during command submissions by submitting commands in a background thread.
Increase the batch replication size to 100.
Add log methods for backing up and restoring log files during snapshots.
Compare log entry terms rather than removing and appending log entries.
Remove rogue debug statement.
Apply cluster membership and term when installing snapshots.
Refactor context constructor to accept a log factory and dynamically generate log files based on protocol names.