[DataIO] Improve formatting and fix unfulfilled reporting (mostly)

There's no good way to get the unfulfilled requests from the Instructor class, and in fact the field that holds the PreferredCourses is modified in each round of assignment therefore it can't reliabley be used to compare preferred courses against assigned per instructor. I've had to implement my own which does not appear to be functioning entirely correctly (duplicate entries added to the report).