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.