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
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`.
Replace `make proto` with the `message` package.
`main.VERSION` => `simplepush.VERSION`.
Add Heka logging support.

* `HekaLogger` logs Protocol Buffer (`HekaProtobuf`) or JSON
  (`HekaJSON`)-encoded log messages to standard output.
* Replace `StdOutLogger` with `TextLogger`. The latter logs simplified,
  human-readable log messages to standard error.
* `Logger.Log()` and all `SimpleLogger` convenience methods now return
  errors.
* Use syslog severity levels for compatibility with the Heka message
  format.
`human` => `text`. Update the sample config.

Fix a format string typo in `TextLogger.Log()`.
Remove `LogHandler.TrustProxy`.
Use debug-level logging for metrics.
`TextLogger`: Remove call tracing.
`Code*` => `Err*`.
Log `HekaLogger.writeMessage()` errors.
Router: Propagate request IDs and cancellations.

* `Router.SendUpdate()` => `Router.Route()`.