DRILL-2575: FragmentExecutor.cancel() blasts through state transitions regardless of current state
FragmentExecutor:
- Changed cancel() to behave asynchronously, and for the cancelation request to
be checked at an appropriate place in the run() loop.