Made criteria and calculator classes generic

Changed the criteria and calculator classes to be generic and work with
any type that implements ICrossoverable. Also introduced the
ICrossoverStrategy and a skeleton implementation.