Implemented parallel handling of tasks

Each task is handled in its own process. It can spawn multiple threads if necessary.
There can be a max number of processes active at the same time (specified in the host_config).
All tasks in one job will be completed before the next job begins processing.

Limitations:
stdout/stderr/logging information from the actions is currently lost.
There is no support for aborting or cancelling jobs.
There is no support for timeouts for actions.