`TCPKeepAliveListener` => `RateLimitedListener`.

`RateLimitedListener` returns a `TooBusyError` if too many goroutines
are active at once. `TooBusyError` is a temporary error, so
`http.Server.Serve()` will sleep before accepting new connections.

Remove `Application.MaxConnections()`.
Add HTTP request rate limiting.

* Add a `TokenBucket` implementation for throttling requests based on
  the client's IP address.
* Add a `TokenTable` interface and an in-memory `LRUTable` for mapping
  IP addresses to token buckets.
* Add `LimitHandler()` and `RateLimitedHandler`.
Rename `http` to `throttle`.
Increase rate limits for tests.
Add `RateLimitedHandler.canAccept()`.
Remove `Token{Bucket, Table}, RateLimitedHandler`.
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.
Clean up `{Gomemc, Emcee}Store.Status()`.
Implement `Locator.Status()`.
Implement `PropPinger.Status()`.
`StatusReport`: Include locator and pinger health.
Clarify listener names.

* `Serv.{Socket, Update}Listener, URL` => `{Client, Endpoint}`.
* `Serv.Max{Sockets, Updates}()` => `Max{Client, Endpoint}Conns()`.
* `RouterConfig.Server` => `Listener`.
`LimitListener.pending` => `{conns, maxConns}`.
Merge pull request #85 from mozilla-services/feature/limits

Add rate limiting
Clarify log levels. Closes #39.

* Critical: Logs fatal errors that prevented the server from starting
  (e.g., missing or invalid configs), or caused the server to stop
  prematurely.
* Error: Logs errors that were fatal for a particular request, and may
  affect other requests (e.g., memcached connection errors, discovery
  service unavailable, bad data returned from database).
* Warning: Logs errors affecting individual requests (e.g., bad data
  sent by the client or app server). The push server can respond
  normally to other requests.
* Info: Normal service operation.
* Debug: Verbose debugging output.

Logger calls that may incur overhead (such as function calls) are now
wrapped in `Logger.ShouldLog()` checks. This check is omitted if the log
fields contain simple string values, since `Logger.Log()` calls
`Logger.ShouldLog()` internally.
Add an `ErrorCode` type and error codes.

Remove the `sperrors` package.
Add `LogHandler`. Migrate to the new log format.

* `LogHandler` logs the result of an HTTP request, wrapping a
  `ResponseWriter` in a `logResponseWriter` to record the response
  time, status code, and content length.
* Tag all incoming requests with the `X-Request-Id` header. This is a
  convention used by Heroku and restify, and allows correlating log
  lines for the same request.
* Add `Worker.id`. Tag all `Worker.logger.*` calls with the ID.
* Remove `log.Printf` calls from `Worker.sniffer()`.
* Remove the deprecated `debug.PrintStack()` call from
  `Handler.PushSocketHandler()`.
* Replace `BadPayloadErr` with `CodeBadPayload`. Remove unused errors.
Add `make proto`.