feat(lib): constraints along with evolutionary strategies
chore: move population structs to separate module
feat(lib): add random search
chore: make library out of eoa_lib
chore: move env to codes/eoa_lib
feat: add evolution algorithm
feat: add pairing of parents
feat: Add replacement strategy
feat: add tournament selection
feat: add initializers, ZeroInitializer, RandomInitializer
feat: add evolutionary strategies to local search
chore: guard test imports by #[cfg(test)]
chore: split types and functions to separate module files
tests: let EqualTerminatingCondition remember matches to return even if no longer equal
tests: For local search test, wait 100 cycles after optimum found
feat: add AndTerminatingConditions that ands multiple conditions
chore: rename NoMatchForTerminatingCondition to NoBetterForTerminatingCondition