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?
It would be helpful to factor out the etcd retry logic (exponential backoff and `checkRetry`) into a module that both `EtcdLocator` and `EtcdBalancer` can use.