Add some heuristic approach for a faster firstround

This adds a Firstround_team_selection class that gets the
Distance_matrix and sort for all firstround-hosts the guests by
"reachability".

Signed-off-by: Jan Losinski <losinski@wh2.tu-dresden.de>
Wrap Firstround_team_selection to python for testing

Signed-off-by: Jan Losinski <losinski@wh2.tu-dresden.de>
Bugfix firstround selection algorithm

There was a double adding of the own distance if the firstround host
and a missing sort for distance after erasing duplicates.

Signed-off-by: Jan Losinski <losinski@wh2.tu-dresden.de>
Hide firstround candidate struct in the cpp file

Signed-off-by: Jan Losinski <losinski@wh2.tu-dresden.de>
Add a simple unittest for Forstround selection

Signed-off-by: Jan Losinski <losinski@wh2.tu-dresden.de>
Enable unittest for Firstround_selection

Signed-off-by: Jan Losinski <losinski@wh2.tu-dresden.de>
make Firstround_team_selection::for_host const

Signed-off-by: Jan Losinski <losinski@wh2.tu-dresden.de>
Unittest that firstround order is preserved...

...using the Guest_tuple_generator.

Signed-off-by: Jan Losinski <losinski@wh2.tu-dresden.de>
Integrate firstround selection into algorithm

This splits the first round procesing from the other rounds and use the
Firstround_team_selection for it.

Signed-off-by: Jan Losinski <losinski@wh2.tu-dresden.de>
Remove dummy distances for first round

Signed-off-by: Jan Losinski <losinski@wh2.tu-dresden.de>
Refactor guest pair slice handling

Signed-off-by: Jan Losinski <losinski@wh2.tu-dresden.de>
fix Guest_tuple_generator to handle uneven collections

Signed-off-by: Jan Losinski <losinski@wh2.tu-dresden.de>
Unittest empty GuestTupleGenerators

Signed-off-by: Jan Losinski <losinski@wh2.tu-dresden.de>
Test first round slicing

Signed-off-by: Jan Losinski <losinski@wh2.tu-dresden.de>