Add test for AtomicUpdate

This PR also implements FakeEtcdClient.CompareAndSwap.

I'll squash this PR after review.
If we get agreement this package only applies to api objects (in which case we should switch it from tools maybe to api/etcd or something) I can address some of that in my later pull.