Make event handling asynchronous

When players are played in the onend event of the last player they do not get played.
Making the events fire asynchronously fixes the problem by allowing player registration to occur at the appropriate time.