Propagate server, handler initialization errors.
Allow config overrides via environment variables.

* Add `LoadEnvironment()` and an `Environment` type.
* Add the `env:` tag to all configuration struct fields. Environment
  variable names are case-insensitive.
* `Environment.Unmarshal()` uses reflection to decode configuration
  options specified via environment variables into a config struct.
* `Load{ConfigForSection, ExtensibleSection}()` now override TOML
  configuration fields with environment variables.

Overriding extensible section types is not currently supported.
`decodeEnvField()`: Support extensible sections.

* Environment variable names are now constructed from section names.
* Explicit `env:` tags are no longer required. The field name will be
  used if the tag is omitted.
Add `splitList()`.

Ensure `GomemcStore` handles multiple servers correctly.
Extract environment variable logic into `envconf`.
Merge pull request #84 from mozilla-services/feature/config-env

Allow config overrides via environment variables
`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`.