Changed how listeners are called

This fixes issues when a Listener implementation throws an exception, causing other listeners (and possibly more logic) to not be handled correctly.  Thus making it more error tolerant.  In addition it will make invoking the listeners asynchronously earlier later.
This required the addition of the threadly library as a dependency (which I plan to use in other places more later as well, once I do more threading based changes)

I am still in progress in switching the networking code to be non-blocking and to use a thread pool.  But I thought I would show these changes before I finish those (I am not sure when I will finish, but it wont be today)...that way you can see them bit by bit as well, instead of a massive pull request.

Let me know if you have any thoughts, thanks.