Not all Raft log entries represent changes to the FSM. Some are cluster
config changes, which are never passed to rqlite. This means that
CommitIndex can be ahead of FSM index, even though the FSM is fully
caught up.
With this change the cluster metadata (arbitrary key-value data associated with each node) is now broadcast across the cluster using the standard consensus mechanism. Specifically the use case for this metadata is to allow all nodes know the HTTP API address of all other nodes, for the purpose of redirecting requests to the leader.
This change removed the need for multiplexing two logical connections
over the single Raft TCP connection, which greatly simplifies the
networking code generally.
Original PR https://github.com/rqlite/rqlite/pull/434