Gracefully close HTTP and WebSocket connections.
Split up WebSocket, update, and health handlers.

* Move `sendClientCount()` to `Application`.
* Refactor `RealStatusHandler`.
Move locator health check to `Router.Status()`.

Closes #156.
Add graceful shutdown. Closes #139.

* Add `IsEtcdKeyNotExist()`.
* `app.Stop()` => `app.Close()`.
* Move `{Set}Locator()` to `Application`.
* Add a `close_delay` option for `Etcd{Locator, Balancer}`. This option
  should be set to 1-2 times the refresh interval.
Use a stronger PRNG seed.
Close all servers on exit.
Add `HostPort()`.
Update the change log and sample config.
Refactor closing logic into a `Closable` type.
Singularize `{Socket, Endpoint}Handlers`.
Use the application logger to report run errors.
Avoid exporting `isEtcdCode`.
Add docs for `Closer`.
Clean up TODOs.
Use the client map to disconnect clients.
Merge pull request #178 from mozilla-services/feature/shutdown

Add graceful shutdown
Ensure `make simplepush` builds libmemcached.

This fixes a regression introduced in #161.
Add a `Socket` interface.
Use a read deadline instead of `time.AfterFunc`.

This avoids spawning an extra goroutine per connection, and makes it
easier to test the worker run loop.
Initial worker tests.