Add shell scripts to .gitignore
Refactor Solution.AssignmentQuality

Solution.AssignmentQuality is new Solution.AssignmentQualities. The new
Solution.AssignmentQuality takes an event as a parameter and only computes
the quality for that event.

Solution.AssignmentQuality no longer iterates over the whole attendance
matrix for each event. It only iterates over the students that in fact
attend the event. This is faster and should give a more accurate estimate
of assignment quality.

Solution.AssignmentQuality now gives a more accurate estimate of
assignment quality by giving a result more similar to that of
Solution.Violations (i.e. it takes pairs of events into account and number
of events assigned to a room and time).
Add Solution.HasViolations

Solution.HasViolations determines if the given event assignment violates
any hard constraints. This indended to be faster than doing
Solution.AssignmentQuality on the given event and checking if the number
of violations is non-zero; this function will return when it finds the
first hard constraint violation.
Add Solution.Improve

Solution.Improve finds the best room and time for a given event (i.e., the
one that lowers the solution's value the most). If it cannot find such an
assignment, it returns an unassigned Rat, signalling that the solution is
at a local minimum with respect to that event.