Remove RequestCancel() and IsCancellationRequested() method for simplifing cancel program. Now can directly use Cancel() and IsCancelled().
use goroutines to execute callback functions and start the pipeline, avoid the possible deadlock issue.

If don't use goroutines, the below case will deadlock:
1. Start a future (FutureA). Then add a onComplete callback function that send to a nobuffer channel (channelA)
2. Start a loop to receive from channelA
3. When receive a value form channelA, complete the FutureA.
4. The OnComplete callback be called in the goroutines that complete the FutureA
5. OnComplete callback be blocked because the receive action is executed (step 3).
6. goroutines deadlocks because send and receive action are in a goroutines.

We can reproduce deadlock issue in WhenAny() if remove the goroutines.
fix a issue that miss the detection for checking if future is completed or cancelled in CAS loop
getChan() will return different channel everytime

So can call getChan() any number of times
update comment and remove unused RequestCancel()
Use result type to check if future be cancelled
Merge branch 'develop'