Demographics initial work

Note that a lot of the logic in the CourseEnrollmentTask is refactored from the original logic in course_enroll.py
This may be overkill, but to test with legacy keys instead of opaque keys, just define a CourseEnrollmentTaskMapLegacyKeyTest(InitializeLegacyKeysMixin, CourseEnrollmentTaskMapTest):  pass.  It will rerun the set of tests with a different course_id.  Perhaps there is a ddt that works at the class level to deal with this kind of testing better.