Rework `Multi_paxos.update_votes`

Since it wasn't immediately obvious to me what `Multi_paxos.update_votes` did while reviewing #470, this change attempts to simplify things by introducing a fairly generic `Std.List.alter` function, which is then used to implement `Multi_paxos.update_votes`, hopefully clarifying what this function does exactly.

* [x] Run CI