Added a more efficent immediate future implementation.
By not depending on the SettableListenableFuture we can avoid synchronization on .get calls, and with calling of listeners.