Directly serialize populations to files

- avoid the temporary copy in memory
Dump population data in parallel
Avoid a scenario that can cause an `OutOfMemoryError`
Generate new populations in parallel
Increase population count and generation iterations
Move population dump/load functions to the population module
Shutdown the persisting agent when done
Randomize the parent pairs that yield new generations
Remove an unused dependency
Refactor some code
Persist every population in a separate file