Demographics initial work

Note that a lot of the logic in the CourseEnrollmentTask is refactored from the original logic in course_enroll.py
May be good to note here that the mapper ensures that there are no events with a time after self.interval.date_b.