Explain the Paxos algorithm to me. What are its assumptions, and what are the safety and liveness properties the algorithm provides?