Move some code from the object model to Utils.

We need that in other models like the signal history one.
Listen to objectCreated() directly instead of going through a model.
Avoid a O(n) lookup for every emitted signal in the object list.

Get the unit-tests almost back to their runtime without the signal monitor,
2-3x faster than before.
Track object deletion via the probe rather than QPointer.

This fixes a few issues:
- Short lived objects from another thread might have started their dtor
already when we are notified about them, making QPointer usage unsafe.
- For remote usage, we need trigger a re-load of the model cell to update
the end time.
- We can now also record the destroyed() signal.