DataLogger's monitor logic is now user defined.

The issue is that when starting multiple instances of a service
(eg. the router) and that one of these intances went down, the logger
would raise an issue with the monitor. This causes problems because in
the case of routers, it's perfectly acceptable to spin up a new router
and then spin it down.

In any case, what is important to a data logger is entirely up to the
user of the library and so I added a callback which allows the user to
take control of that logic.

Also note that the previous implementation had a race because it did
not grab the lock of the ZmqNamedMultipleSubscriberEndpoint which
meant that it could race with a new service spinning up. This would
not happen very often because the monitor is only polled every second.