Implement MasterElection

It can happen (at least with FakeEtcd) when we call `StopElection()` which sets `running_` to false (under lock), but then goes into a couple of `cv_.wait()` calls, and even though we've deleted the watcher earlier in the method, at least with the FakeEtcd implementation there could still be an update callback brewing somewhere on the eventloop which can sneak in and grab the lock.

I've added a `TODO` to make it a `CHECK` when `FakeEtcd` doesn't do this.