Fixed race condition in IDESolver and simplified the code

This fix removes the blocking wait that cause deadlocks.

The implementation relies on the Executor's queue instead of maintaining two separate worklists. The waiting stops when the queue is empty and that all scheduled tasks are completed.

The queue's capacity is actually Integer.MAX_VALUE, which should be sufficient in practice.