implement basic crash recovery

Also use the fact that etcd supports TestAndSet with an empty Previous value
for atomically setting a key. Neato!

25% of new instances are made to crash 5-10 seconds from startup, just for
simulation. Other nodes watch for them to disappear, and bring them back up.

I made the nodes go to etcd as their source of truth for their logging and
hesitation timing. Normally this would use their in-memory registry, but I'm
using TTL to simulate crashing, which isn't related to the registry. In the
real world the node would notice an app crashing and unregister it.