Correct set.FromList. Add ordering assignment.

set.FromList now takes an ...interface{} instead of []interface{}. It can
still be called in the same way, but now the elements do not have to be
type-asserted to interface{} before passing them.

An ordering assignment was added to heuristics:
RandomAssignmentWithOrdering. It assigns the events in the given solution
based on the ordering (an []int with elements corresponding to event
indices) and, if possible, assigns a random element in its current domain.
This function keeps track of variable domains and shrinks them (using the
new Solution.AssignAndShrink() method). If the domain is empty, a random
variable will be assigned to the solution.

Solution.AssignAndShrink follows the old (pre-invalid solution) method of
Assign, except that domains are just []set.Set and they are external.