Allow event.Event observers to be coroutines

Function observers continue to work as before, but now coroutine
observers can be used. This requires Event.fire to be a coroutine.