Use the cancellation structure to have a timebased query cancellation.
Rather than a thread, check the clock every so often in QueryIterartorBase.hasNext/.next.
Add .setTimeout to qQueryExecution and QueryIterator.
Default to zero - no timeout - no checking.
First step: QueryExecution.setTimeout(long delayms) added and implemented.
QueryExecution.setTimeout(long timeout1, long timeout2)
for time to first result (from WHERE clause iterator) and time after that.
Reopen to set fix version.
Set fix version to clear up unmarked ones.