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