Adds events to class definitions

Classes can now declare a list of events which they are able to trigger.
Client objects can bind a nominated method of their own to any of these
events to be called when the event is triggered. Data can be passed
from the triggering class to the target method.

Nominated methods must be accessible to the class which owns the event,
according to existing rules of method access. Classes related by
inheritance can therefore call methods which are protected.

Client classes can also unbind themselves from previously bound events.