it has been found in #174, that if there are multiple instances of
widget, it keeps subscribing on all sources, because of how dbus
interface works.
In order to hande it, all subscriptions are now kept from singleton with
tracking active clients
* split formatter into separated singleton classes
* split data engine matchers to classes
* nodiscard attribute for formatter methods
* small refactoring in matchers
* fix codefactor warnings
* fix test building