Improve future binding.

There was a bug when:

```
let task3 = task1.then { return task2 }

...

// cancel when task1=fulfilled, task2=running
task3.cancel()
XCTAssertEqual(task2.state, .Cancelled)    // FAIL
```

so I fixed this by configuring `task3` to associate with future `task2`'s pause/resume/cancel.