Add small and simple event bus

This event system can be used to decouple different parts in CATMAID.
For instance, being notified about the change of the active skeleton or
active node is easily possible with the Events object. The producer (who
actually changes the active node) would trigger the event:

  Event.trigger('active-node-changed');

A Consumer, like maybe the 3D widget, that is interested in such an
event would register a callback for this event:

  Event.on('active-node-changed', callback);

A QUnit test has been added.
Event system: support custom arguments for trigger and callbacks

If additional arguments are now passed to trigger(), they will be
forwarded to the callbacks.
Event system: allow for custom contexts of callbacks

To specify the context in which the callback is executed, the on()
method now excepts a third argument. If it isn't provided, the event
object is used as context.
Event system: add proper credits

Most of the desing comes from the following website:
https://corcoran.io/2013/06/01/building-a-minimal-javascript-event-system/
Event system: simplify use as mixin in other objects

The extend methods copies all properties and functions of the event
system to another object. This makes it easier to use it in different
objects.
Event system: add more documentation
Event system: return extend object after extension

This simplifies the use of the extension method.
Event system: add clear function to remove all listeners of an event
Event system: make trigger function more robust

Improve robustness by not expecting an event to be registered and check
if it exists before trying to iterate over its listeners.
Event system: add method to unregister single callback
Event system: handle trigger() without listeners
Merge branch 'add-event-system'
Trigger an "active node changed" event if the active node changes

Since this event shouldn't be fired if nothing changed a test for this
is added.  The event is only triggered if there was a real change.
3D viewer: listen to the active node's change event

This also allows us to remove the direct call to the 3D viewer in the
active node update code within the tracing layer.