Allow values to be null
Cleanup the run() method, abstract event dispatching.

- re-using the same Event object would have been a problem if a listener stopped propagation.
  any future dispatch() would have prematurely exited as a result.