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()`.
Add `SimpleLogger.Alert()`.
Wrap all logger calls in `ShouldLog()` checks.
Add `SimpleLogger.{Notice, Panic}()`.
Clean up logging conditionals.
Merge pull request #86 from mozilla-services/feature/logging

Refactor logging