Revert to e357506fb20dda for improve performance
add a channel to let get/set operation can match Go's happen-before condition
Use CAS operation to avoid concurrency issue, the performance is better than using goroutines in this case.
remove lock field
use int32 field and atomic operation to handle cancel flow
Use decreasing an atomic counter in callback function to repleace loop, it will improve the performance of WhenAll
1. Fix a issue that doesn't set cancelled status when directly call Cancel() function.
2. Rename canceller.SetCancelled() to Cancel()
3. Remove IsCancellationRequested() and SetCancelled() from Future struct
Remove used code
re-format code
Split codes to four source code files
1. Add docs for functions.

2. When all futures don't match predicate, the future returned by
WhenAnyTrue will be rejected.
allow pipe multi futures
Rename Done, Fail, Always to OnSuccess, OnFailure, OnComplete
1. Rename WhenAnyTrue to WhenAnyMatched
2. Add NoMatchedError to present no matched future in WhenAnyMatched operation
Add callback function for Cancelled status
Add handler for all futures are cancelled in WhenAny and WhenAll operations
Change the error type to NoMatchedError for WhenAny operation and remove debug code and
Remove WaitAll and WhenAllFuture from public functions
remove WaitAll
Add unit test for cancel callback