Optimize the futures returned by Future.resolved and .failed

Avoid creating listeners and the lock, avoid locking and call callbacks immediately.
Make Future#map work without a block
Make Future#recover work without a block
Refactor Future.all and .first for style
Rewrite the future combinators using CompletableFuture instead of Promise

This creates one less object for each link in a chain of async operations.
Extract commonalities from the future combinators
Merge branch 'future_additions'