Redirect clients to different nodes if the current node is full

This pull request adds an `EtcdBalancer` that redirects clients to different hosts, and refactors some of the shared etcd logic used by the balancer and locator. If the balancer is unavailable or the cluster is full, `Worker.Hello()` responds with a 429. (503 is more accurate, but already used to report a number of error conditions).

See https://bugzilla.mozilla.org/show_bug.cgi?id=1091192 for more info. [`MozLoopPushHandler`](https://github.com/mozilla/gecko-dev/blob/master/browser/components/loop/MozLoopPushHandler.jsm) doesn't support redirects yet, so this is only the server-side plumbing.

@bbangert, @jrconlin r?
Incidentally, I think this addresses the `sock.Uaid` unset issue we talked about on IRC.