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.
In the future, we may want to consider having these listener invocations happen on a thread pool so that it wont block the network thread as the listeners handle the provided data.

These changes can make it easy to do that later if we want to.  I wanted your guys opinion before making that change as well (and that is partly why I was going to do the NIO changes first).