Add crossover and mutate operations.

Crossover and mutate operations are added to solver/hpga/operations.go.

Added Solution.RemoveConflicts(e) which removes all conflicting
assignments with the event e (i.e. it restores all of the domain of e to
its full size). This may be removed in future commits if it turns out
not to be useful.

Fix Domain.hasConflict and rename to Domain.HasConflict. HasConflict
also now returns true when the given rat is not in the base domain.
This is the correct behaviour but *should* never be triggered).

Added Solution.RatAt to determine the Rat assigned to an event; if the
event is an invalid event, then badRat is returned.