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
Replace `JsMap`s with structs where possible.
Handlers: Clean up client count checks.

* Use `app.ClientCount() >= max_connections` for all checks.
* Remove redundant type conversions.
* Fix a typo in `RealStatusHandler` that caused the handler to
  erroneously report the server as unhealthy.
Handlers: Clean up key validation.

* Replace the `filter` RegExp with `validPK()`.
* Consolidate map lookups and type assertions in
  `Handler.RouteHandler()` and `GCMPing.Register()`.
* Remove `proxyNotification()`.
`GCMPing`: Re-use `http.Client` instances.
Add a `CommandType` type.
Send the correct `Content-Type` for JSON replies.
Clean up conditionals.
Worker: Remove unused `wg` field.