First step for restructuring cache load mechanism.
- Cache is now not built when it is requested, but when something
changed
- Rebuild is done asynchronously, and only one at a time
- This first iteration is a first hack, no tests nor any proper
segmentation present.
Refactored asynchronous cache rebuild to use Executor interfaces
- Dropped ProcessGroup and recreated MonitoredExecutor (test similar)
- All users of ProcessGroup.spawn() could be converted to Runnable
- Clarified thread separation of scan and completion in Loader
- Final benefit: Easier testing for StepCandidateCacheLoader
- added unit tests for StepCandidateCacheLoader