Add an etcd watcher class.

Also a few cleanups I forgot in previous commits, like not using a temporary object when using ```UpdateLeader```, and using an ```unique_ptr``` in ```RequestDone```.
Shame there's no mutex::held()