refactor(tsp): Do not allocate in binary string fitness function
Currently the fit function has allocated for each individual!
That slows it down terribly!
This reimplements it to implement the fit_population, reusing
the same node permutation and same precedence_count
feat(lib): allow modifying fitness function in evolution_algorithm
chore: move population structs to separate module
feat(tsp): Remove with iteration functions
feat: split params out of PerturbationOperator to allow for non-'static PerturbationOperator
This means PerturbationOperators can now hold non-'static references.
Right away, utilize this in the Random2OptPerturbation for the TSPInstance.
fix(tsp): few more tweaks
chore: add jsons with plot definitions
feat(tsp): add binary ls, use 10k iterations instead of 5k
feat: add a lot of algorithm showcases
chore(tsp): few minor updates
tests(tsp): move tests to proper modules, fix uses
feat(tsp): add MinimalSpanningTree initializer
feat(tsp): add 2opt perturbation for subsequence reversal
feat(tsp): add TSPInstance convertor to GenericGraph
feat(tsp): add minimal spanning tree and filter_edges
feat(tsp): add nearest neighbor initializer
feat(tsp): add cycle, no and partially mapped crossovers
refactor(tsp): split to multiple files out of tsp.rs