Change Future nomenclature from "complete/completed" to "succeed/successful"

* "completed" should mean either successful or failed
* Get rid of the bangs in #fail! (and #complete! should be #succeed) -- these are not dangerous methods
* Future.complete should be Future.successful
Change Future nomenclature and introduce Promise

* Instead of having a Future that is both readable and writable, add Promise (and CompletableFuture) that represent the write side of the pair, and Future, which represents the read side.
* Change the name of suceed/successful?/on_sucess to resolve/resolved?/on_value.
* Change Future.combine to Future.all
* Remove Future#get
Update IO integration spec to use Promise instead of Future
Add Future#on_complete

A convenience for when you just want to know that a future has completed.
Add Promise#observe

Convenience for bridging futures.
Add Future#attempt

A convenience for performing a computation before fulfilling a promise, and failing the promise if the computation raises an error.
Avoid leaking state from void Future methods
Rename Future#attempt #try, and add docs
Use Promise#observe to simplify
Merge branch 'rewrite_futures'