Removed the unconditional casting, and supported the ability to compose any type of deferred result
1. factory methods should return the type they are declared in
2. static factory methods should appear on DeferredResult and delegate to CompletableFuture, returning DeferredResult
3. other static methods on CompletableFuture should have a DeferredResult counterpart that compose DeferredResult objects as CompletableFutures and then call the corresponding CompletableFuture static method.
4. Don't cast DeferredResult to CompletableFuture - compose instead.
5. Re-applied the Basic.java test so that it dropped casting and used DeferredResult predominanlty.