Simplify request rate limiting.

* Add `CanonicalURL` for constructing base URLs with default ports.
* Add `ListenerConfig` for configuring the WebSocket, notification,
  and routing listeners.
* Add `ServerConfig.{Socket, Update}`.
* `RateLimitedListener` => `LimitListener`. `LimitListener` uses a
  semaphore to limit the number of accepted connections.
* Add `LimitConn` for tracking and returning leases for accepted
  connections.
* Remove `Application.{MaxGoroutines, KeepAlivePeriod}()`.
* Use separate listeners for the WebSocket and public HTTP muxes.
* `RouterConfig.Addr` => `RouterConfig.ListenerConfig.Addr`.
* Replace `Serv.Listener()` with `Serv.{Socket, Update}Listener()`.
* Replace `Serv.FullHostname()` with `Serv.{Socket, Update}URL()`.
`FlushReply`: Avoid serializing empty slices.
`EtcdLocator`: Remove unused embedded mutex.