SSP-2008 Reflect term validations against all planned courses

Previously, duplicate planned courses would not reflect term
validation violations.

This was happening b/c planned courses were placed into a map
keyed by course code but with only one course per code. After
calculating violations for all the courses in a term, the
invalid courses in the course-code map were marked as such. But
because the course-code map could only have one course per code,
plans with multiple instances of the same course-code pair (even
across terms) would end up with at most one flagged course per code,
effectively chosen at random.