Demographics initial work

Note that a lot of the logic in the CourseEnrollmentTask is refactored from the original logic in course_enroll.py
Actually, I'm seriously considering just keeping this in. It doesn't generate too much noise and is very useful.