Telemetry

@fractalcat @afcowie @christian-marie 

See also https://github.com/anchor/vaultaire-common/pull/23

Telemetry:

 * profiler thread associated with a worker (reader/writer/contents) daemon
 * read/write operations report their stats to the profiler thread via internal STM bounded queue
 * profiler aggregates stat reports (i.e. calculate the sum/mean/median) and publishes the results to broker
 * client subscribes to the broker for telemetric reports

Unrelated changes:

 * use Network.URI for broker strings
 * ``DaemonArgs`` sum type to avoid passing around shutdown signal + ceph data + something else

In general, reporting stats such as the time taken to handle a read request is a simple matter of wrapping the action: ``profileTime ReaderRequestLatency origin act``
I just discovered that line notes refer to code *above*, not code below. Anyway. :) I was trying to say that the code _below_ this line was very clever. But of course your code above is very clever too. Except for one thing: I've been conditioned by Haskell people not to do `(+ 1)` in loops without something to force strictness. @tranma Is that a concern here?