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?
The original design allows for users to have multiple devices. In that case, the deviceID should be consistent across servers because it's associated to the user. If this is no longer the case, then deviceids are not as useful.