When adding a new node to the cluster, wait for the conf change to be
committed and applied before taking a state snapshot and responding
to the new node.
Previously, Join had a race condition between the application of the
conf change entry and the taking of the snapshot. If the snapshot was
taken before the conf change was committed or applied, the new node
would try to boot its state machine from a state that did not include
itself in the configuration. It could mistakeningly think that it is a
single-node cluster and try to elect itself, panicking when its node
id doesn't exist in the progress list: See issue #1330.
Waiting for the conf change to be applied ensures that:
* The /raft/join endpoint only returns if adding the node to the cluster
was committed.
* The snapshot returned from the /raft/join endpoint includes the new
node in its configuration.
This is a backport fix for the 1.2.x release line.
Closes #1335