Performance tweaks (parallelization)

1) For every generation, the algorithm now computes all the candidate
   points in parallel and stores in an array (cadidatePoints). After,
   these points are added to the Pareto frontier using checkDominance()
   function. Before this commit, the points were added after they had
   been computed by each thread, which creates a bottleneck in the
   algorithm, since only one thread at a time can add a point to the
   frontier.

2) The parallel loop schedule that creates each generation is now set to
   dynamic instead of static, because it is expected that, in general,
   each objective function call will have a different computational
   burden.