Load `Metrics` before `PropPinger`.

`GCMPing` emits metrics.
Capture timing information as soon as possible.

* Avoid error logging for non-fatal errors. See #39.
* Add message routing metrics.
Refactor `Metrics`.

* Replace `metrex` with a `sync.RWMutex`.
* Add `Metrics.Gauge{Delta}()` for recording gauges. Gauges are excluded
  from averages, and remain unchanged unless explicitly updated.
* `m.dict` => `.counter`.
* Remove the `sync/atomic` dependency. Since all `m.counter` operations
  are protected by a mutex, there is no need to use `atomic.AddInt64()`.
* Release the mutex as soon as the map has been accessed.
* Change the `Metrics.Timer()` signature to `(string, time.Duration)`.
  All times are now converted to milliseconds.
* Add a gauge for the number of connected clients.
* Track client connections in `Handler.PushSocketHandler()`.
* Add timing for routed messages.
Clean up metric names.

* Record `updates.handled` only if the update is flushed to the client.
* `updates.client.{connect, disconnect}` => `socket`.
* `updates.clients` => `socket.connected`.
* Add `updates.routed.{invalid, unknown, error}` counters to match the
  `updates.appserver.*` counters.
Remove `Metrics.gaugeLock`.
`RemoveClient()`: Ensure `clientCount` >= 0.
Update the connected client gauge periodically.

* Add `Serv.{Close, sendClientCount}()`.
* `Serv.Close()` stops the gauge ticker and closes `Serv.listener`.
* `socket.connected` => `update.client.connections`.
Style nits. Track `updates.routed.misses`.
Merge pull request #78 from mozilla-services/feature/stats

Clean up stats
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.