Add flag to guard against circular events

The ``busy`` flag is set on each listener while is being handled by the ``trigger`` function. This guards against possible circular references.

Ref #57