Class MonitorImpl

Internally, uses a dedicated thread to process events. Events received
from log4j are placed on a queue. This "Active object" or "Actor" pattern
means that the data structures that hold counters do not need to be locked.

Command requests are treated like events. They place their result on
a result queue.

A visitor quickly dispatches events and commands
to the appropriate handler method.

The monitored objects form a hierarchy. For each object type, there is
a mutable workspace (whose members are private and non-final) that is
converted into a monitor object (whose members are public and final) when
its fix() method is called: