New messaging system (again!)

This time it's much simpler (and hopefully faster)

To subscribe to an event, call

on("event_name", |signal| ... )

or just:

on("event_name", || ...)

to broadcast an event:

broadcast("event_name", data)

where 'data' is any custom data you want to send. Or just:

broadcast("event_name")

if you don't want to send any data.

When an entity is removed from the scene, all listeners will be removed
too. You must bind them again if the entity is added to the scene again.

A Signal object contains information about the event, importantly:

sender:Entity // the entity that broadcasted the signal (null if
broadcasted by the scene itself)

get: func <T> (T:Class) -> T  // get custom data from the signal