Freecell Solver distinguishes between two levels of tasks:
1. Soft Thread - a soft thread is one dedicated scan running
on the state collection.
2. Hard Thread - a task that should be performed by one system thread
with all the dedicated resources that should prevent collisions with other
hard threads as much as possible.
A hard thread switches between several soft threads.
At the moment, hard threads can not be multi-threaded using the system
threads, as no locking mechanisms are in place. But the distinction still
exists in the code.