Execute as many processes in parallel as there are (logical) CPUs on the local machine

This backend is based on the multiprocessing package and should work on every
multicore system without additional settings even on virtual machines.
Each process corresponds to one combination of input data set and
parameter choice.

Asks the listener which of the nr_subflows subflows
(identified by their subflow_id) have already finished executing.
subflow_ids must be a string representation of a set. The
listener sends the set of finished ids back.

execute_subflows;*path*;*nr_subflows*;*subflow_obj*;*runs*:

Asks the listener to execute nr_subflows subflows via a
multiprocessing Pool. path is the absolute path where the
training data is stored, e.g. the temp_dir of a node.
subflow_obj are pickled strings of the subflows. runs is a
list containing the run numbers the flow should be executed
with: the run_number determines the random seed, e.g., for a
splitter node.

send_results;*subflow_ids*:

Sends back a list of results (PerformanceResultSummary) of subflow_ids.