Class that can execute {@link ITask}s using a thread pool while respecting blocking requirement of given tasks. This executor is thread safe.
Because of using a thread pool and the ability to block The user must take care of the following requirements:
- tasks should not synchronize between each other due to the risk of dead locks
- blocking tasks should only be used if they are really needed because they are blocking subsequent tasks from executing
@author Stefan Rybacki
@see ITask
@see TaskManager