Extract auxiliary functions from NSGA
Move domination and sorting functions to utils
Extract GA blocks into separate module

Some elements of NSGA implementation - genetic operations, binary
tournament selection - are reusable, hence they are hereby extracted to
genetics.py module.
Extract hypervolume calculation to separate module
Clean up imports