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's [not clear](http://dougt.github.io/webpush-protocol/draft-turner-webpush.html#webpushserver-useragent) to me if this should echo the device ID, too...I don't think so, since it doesn't make sense for the server to validate the ID only to tell the client, "connect to this other server instead"—where the ID may or may not be valid.