First draft IVar-Future-Promise-Probe unification

Not ready for merge. Opening discussion. Compatibility layer is totally missing for now.
What is the advantage of having a `Promise` class in addition to `Future`? In the original implementation they were very different. `Future` was very simple and offered no chaining. `Promise` allowed for both success and failure chaining and was based heavily on JavaScript's Promise/A and Promise/A+ specifications. As this gem has evolved, the functionality of the two classes has become increasingly similar. If we are going to have a `#promise` method on future, is there a justification for also having a `Promise` class?