Initial checkin.
stop sending JOIN when bootstrapping is complete
Coordinate views with majorities, via Lamport's suggestion

Lamport suggests that all protocol participants agree that the quorum
for slot N is based on the view in force in slot N-α.  This requires
tracking old views, and also limits the proposals that can be active to
those for which a quorum is known.
send decisions to the local replica (actually a critical bit of the protocol)
minor optimization
always copy peer_history, to avoid aliasing
assert peer history is linear
print the random seed at the end of a run, too
add retransmission of PREPARE and ACCEPT
Replicas catch up from one another rather than re-proposing

Also, the commander avoids the need to re-transmit DECISION by informing
the local replica, which can then disseminate the decided proposal via
CATCHUP.
Don't create a Commander instance if it's a duplicate

Creating an instance binds the component to the member, which leaves
extra commanders around, leading to crashes.
Delay sending WELCOME until the replica is quiescent

This avoids sending half-baked state with slots that are ready to commit
but not committed.
Rename decided_slot/decided_proposal to commit_slot/committed_proposal
deep-copy messages
don't re-propose the current view
allow more than two missed heartbeats
We really can crawl XKCD in 7 seconds.  Mention Python 3.3 and Windows.
Ignore popular temporary files.
Ignore @*, not just @.
Separate main() and library classes. Rename library module crawling.py.