refactor: extend local search to accept any inputs
Instead of accepting only BinaryString, accept anything.
Extend the operators to accept anything.
tests: move all tests to separate submodules
tests: add rosenbrock test
feat: add MaximizingOperator
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