When a query is cancelled (say by Foreman.cancel()), Foreman moves to the CANCELLED state, which indicates that cancellation is in progress. Cancellation requests are sent to remote drill fragments. These should be replied to via QueryManager.statusUpdate() (inherited from FragmentStatusListener), which in turn updates Foreman. However, if any of the cancellation requests are not acknowledged (due to drillbit failure, RPC timeout, etc), then the being-cancelled query will stay that way indefinitely. We need to have a way to find such queries and force them to be cleaned up. This may require substituting stub listeners for some of the objects involved in case cancellation acknowledgements still arrive even later still – these need to be safely invokable by the RPC layer even though the query they referred to is gone.