Individuals generated by GM are considered.

Previously, it was possible the GM would generate better individuals than
the best known individual and they would not be checked if they were. Now
when an island does selection, it loops through the list of generated
solutions and compares their values to the best-known values. If so, it
handles them by sending a valueMessage to its children and a
solutionMessage to the controller.
Rename Instance.domains to Instance.Domains.

Instance.Domains are now exported so that they can be used without
generating a new solution (for hill climbing).

Add the OrderedWeightedAssignment heuristic which assigns to a solution
based on weights determined by a meta-heuristic.

Add Solution.MakeShrinkableDomains which generates a list of domains (as
sets) that can be shrunk.
Hill-climbing now does a value-weighting meta-heuristic.

Add Solution.ConstraintPairs which generates a map[ConstraintPair]int
which indicates how many constraints are broken by the current assignment.
This is used in the new hill climbing meta-heuristic.
Add timeout to message/send to try to isolate #4.

If a send would take more than 10s to occur, the program will panic.
New behaviour for searching for solutions.

Spaghetti will now only search for an ideal solution when --ideal is
specified. Otherwise it will search for a valid one only.

A --timeout of 0 means that the program will only exit when it finds an
ideal (--ideal specified) or valid solution.