Tweaking future unwrapping

This PR adjusts our implementation to the latest draft of the Concurrency TS. It includes the following breaking changes:

- `future::unwrap` and `shared_future::unwrap` were removed. The functionality is still present via the futures implicit unwrapping constructors (the one for `shared_future` is our own extension).

- `future::then` and `shared_future::then` perform implicit unwrapping only for the `future<R>` case (previously, all kinds of futures).

Additionally, this PR also includes an optimization that was previously reverted due to failures caused by "too much implicit unwrapping" #588 , and a fix for #1182.