Add Future.traverse
Add Future.reduce
Fix whitespace in the Future docs
Refactor Future.reduce

Separate the ordered and unordered cases into separate classes.

I wanted to make the solution completely stateless, but didn't manage to do it. It's possible for each case separately, but without duplication I don't know how to do it.
Pass the value/error to Future#on_complete callbacks
Redefine all Future composition in terms of #on_complete

This makes it easier to duck type futures, all you need to do is implement #on_complete, instead of #on_value and #on_failure.
Add specs that test future composition with #on_complete

Future.reduce does not conform to this pattern yet.
Change Future.reduce to allow #on_complete composition