Critical change to message dispatching

This change fixes outstanding preformance, threading and message
dispatching issues with one tiny fix. Previously a lock was contended
for a relatively long time while dispatching messages all the way down
the call stack of the dispatch. Now the lock is only intermittedly
contended while the delegate is pulled out of the queue and then invoked
external to the lock.