implement recovery in case of failures
a complete failure of this software would be loss of funds. to prevent that, failsafes should be implemented. the user should be able the run the daemon in `--recovery` mode, so that funds can be recovered.

possible failure cases (in case of Alice):
1. the node crashes after Alice locks her funds, but before Bob has claimed. in this case, the funds are locked until either Bob claims or t1 passes (or if it's still before t0, Alice can refund). the user should be able to re-run the daemon, passing in the contract address of the Swap contract, and re-claim the funds.
2. the node crashes after Bob claims, but before Alice generates her monero secret (and wallet). the user should be able to re-run the daemon, get Bob's secret from the contract, and generate her monero wallet.
3. Bob never claims. Alice should then wait until t1 and call `Refund()` on the contract. (covered by #11)

possible failure cases (in case of Bob):
1. the node crashes after Bob locks his funds, but before being able to claim his ether. the user should be able to re-run the daemon, passing in the contract address, and claim his ether. if Bob has not yet notified Alice that he locked his monero, he should do that (then Alice can call Ready() and Bob can claim)
2. Bob is goes offline for the entire duration where he can claim. in this case, ideally Alice will refund at some point refund (she is incentivized to, otherwise she loses her funds as well). the user can re-run the daemon and get Alice's secret from the contract once she refunds, and then re-generate their monero wallet.
3. Alice never calls `Ready()`. Bob should then wait until t0 and call `Claim()` (covered by #11)

in these above cases, user needs to know the contract address - it should be written to disk as soon as it's known. same for Alice and Bob's generated secrets.
