Added all reproduction strategies

- Added ShallowCopy and DeepCopy methods to some domain objects.
- Extracted shuffle algorithm to its own class for reuse.
- Added all mutation and crossover strategies.