This commit is both good and bad.

The good:
* FutureListenableFuture no longer blocks on addListener if the parent future has not been set
* FutureFuture's implemention does not have to synchronize so much
* FutureFuture's implement of cancel and isCancelled is now 100% accurate if the parent future was canceled

The bad:
* FutureFuture is less likely to be able to cancel.  If you call cancel before the parent future is set, then we can not guarantee we can cancel the parent future.  So we no longer make an attempt to cancel the parent future when it is set (since we already told you it is not canceled).  I am not super happy with this, but decided it is better to not cancel a future, than it is to tell them we canceled it (and was actually unable to do so).