MDL-46132 tool_monitor: Add a universal event observer

This observer does the following task:-
1) It monitors all events and stores relevant data in a temporary table
2) It doesn't write the events straight away, it buffers them, so there is only one db write per request
3) It calculates and sees if there are subscriptions related to those events who need to be notified
4) If there are such cases, it generates the message to send and schedules a adhoc task for the same
MDL-46132 tool_monitor: Add unit tests for the universal observer