Save reference to the calling thread in each event

This way, even though publish and publishLater handle the event
notification on the event dispatch thread, the original calling thread
can still be gleaned from the event. This is useful for debugging.

We also take a snapshot of the stack trace, so that it is crystal clear
exactly where in the code the event publication took place.