[Future] improve cancellation

* Improve warn message in Future::cancel()
* Don't cancel a Future in the destructor if it was already cancelled or received
* Restructure CancelFutureTest into single separate test cases

With this I can not reproduce the weird CancelFutureTest behavior anymore
neither SIGABRT nor the timeout.
21 jobs for improve_future_cancellation in 22 minutes and 22 seconds (queued for 2 seconds)