Expanded utilities for working with listeners and callbacks in event driven designs

I added "CallbackHelper" to go along with "ListenerHelper"...ListenerHelper is still the implementation to use with runnable listeners, but CallbackHelper can help reduce code for interfaces where callbacks have multiple functions, or arguments that need to be provided.
Because of this I put both into a new package (org.threadly.concurrent.event).  The old ListenerHelper is now marked as @Deprecated, and will be removed in 3.0.0.

Eventually if this package gets too big, we may separate this into another project under the org.threadly groupings.  Right now it is small enough that I don't think this is warranted.

I will be merging this shortly, but I wanted to create it as a pull request (which I will annotate line by line any interesting changes) so that when @lwahlmeier gets back from vacation he can check it out and provide feedback for the future.  I make sure he can look at this before the 2.2.0 release.
It's discreet and hard to notice since we moved these classes...but this does include a small bug fix.  If a runnable removes a listener from the callListeners thread, a ConcurrentModificationException would be thrown.

Although this will add load (particularly if no modification would have otherwise occurred) this should be a simple way to solve this issue.  If anyone finds load issues with remove, I would be interested to hear about them so we can optimize this.  But for now, this is simple.