Merge pull request #62 from jentfoo/unstable_staging

Expanded the functionality for FutureUtils
Expansion to the utilities provided in FutureUtils
This adds more ways to get a ListenableFuture for a collection of futures.
In addition we only need an iterator, and not a whole collection.  This allows us to tollerate collection modifications while we are setting up the resulting future.
Bit of unit test code duplication I forgot to reduce in the last commit.
A couple additional comments to make the code review clearer
Little expansion of the unit test coverage (making sure canceled futures are handled correctly)
Merge pull request #64 from jentfoo/unstable_staging

Expansion to the utilities provided in FutureUtils
Added implementation and testing for "FutureCallback"
It was often that we were just using the listeners to know when to get the result from the future.  This simplifies that interface into a "FutureCallback".  You can now add a future callback to any ListenableFuture if you wish.
Merge remote branch 'upstream/unstable_staging' into unstable_staging
Small change so that the ListenableFutureResult can be chained as a Callback to another Future
Fix for possible unit test failure...implementation was rounding, where unit test was not
Slightly safer way to handle a possible exception when calling a listener.
This way if an exception is thrown providing the task to the executor, we will still call the other listeners.
Added @since documentation for things that were added in 1.2.0
Added @since annotations for all inner classes (and for their correct insertion date)
Added a "SameThread" executor implementation.
It was almost an oversight that we had not included this earlier.  It is different from the "NoThreadScheduler" as everything provided to it is executed immediately (instead of waiting for the next call to .tick)
More unit test verification around this simple wrapper (but still worth having)
Added static call to get a single instance
This is just to avoid having to construct and toss these away all the time.
Performance and cleanup improvements to the TaskExecutorDistributor and TaskSchedulerDistributor
This includes:
* Performance improvements for scheduled tasks, we now start the task worker on the scheduled thread if we can (meaning if the worker is not already running)
* Performance improvements for shortly lived task keys, by avoiding to construct the ArrayDeque till necessary
* Unit test improvements to improve code coverage and behavior verification
* Deprecated some of the definitions to try to make things more uniform (scheuleTask instead of schedule, similar to how we have submitTask compared to submit)
Added a deprication notice here for issue #65 and #68
No functional changes, just code cleanup
* Removed an enum from PriorityScheduledExecutor that is not used
* Cleaned up the if/else logic in the TaskExecutorDistributor worker
* Handling InterruptedExceptions consistently by making sure that interrupted status is reset
The statistic tracker was not handling the fix for issue #34
This fixes that, as well as cleans up the logic for the low priority tasks a little.