Background-ify, include cohort column in student profile CSV download

TNL-453

Re-implement the existing student profile info CSV download (on the "Data Download" section of the instructor dashboard) as a background task to alleviate browser timeouts. Also add a "cohort" column to the CSV.

@nasthagiri 
In the analytics pipeline code, we ended up writing a method for generating a 'safe filename' from a course_id.  It might be useful to actually have this in opaque keys library at some point:

def get_filename_safe_course_id(course_id, replacement_char='_'):
    """
    Create a representation of a course_id that can be used safely in a filepath.
    """
    try:
        course_key = CourseKey.from_string(course_id)
        filename = replacement_char.join([course_key.org, course_key.course, course_key.run])
        return filename.replace(':', replacement_char)
    except InvalidKeyError:
        # If the course_id doesn't parse, we will still return a value here.
        # Validation should have been done elsewhere, but do the minimum
        # here to make a valid filename.
        return course_id.replace('/', replacement_char).replace(':', replacement_char)