Add course id as data-course-id to optgroup options

Add an attribute to section options (inside course offering optgroups)
named data-course-id that contains the course offering’s id. This will
be used for fetching grades data.
Add sectionOrgUnitId to gradesSpecifier

Adds an attribute named sectionOrgUnitId to gradesSpecifier to store
the section orgUnitId when a section is selected.

`updateGradesSpecifier()` handles the extra id when key is `orgUnitId`.
Get `courseId` and `gradeItemId` from `gradesSpecifier`

Ensure that `loadGradeItems()` and `loadGradeItemDetails()` actually
use the values in `gradesSpecifier` instead of getting them from the
select lists. This is extra important with the distinction between
course offerings and sections.
Change classlist to use `/enrollments/orgUnits/(orgUnitId)/users/` API

Changed the API for getting the classlist from
`/d2l/api/le/1.4/(orgUnitId)/classlist/` to
`/d2l/api/lp/1.4/enrollments/orgUnits/(orgUnitId)/users/`. The latter
method allows a role to be specified. `roleId` 106 is sent as a query
parameter so that only students are returned. Previously, all enrolled
users (including instructors) were returned, then ignored if they don’t
have grades data.
Extract course code patterns

Created a dictionary named `courseCodePatterns` and moved the inline
patterns from `processGrades()` to it. This allows the patterns to be
used elsewhere without repeating them.
Set `sectionOrgUnitId` to null if not a section selected

Modified `updateGradesSpecifier()` to set `sectionOrgUnitId` to null if
the selected course is not a section. Previously, selected a section
then a course offering would leave the section id in place, potentially
causing the wrong grades data to be loaded.
Improve section code generation

Improved the way section codes are generated by first checking if the
course offering’s code is in the standard Blackboard style course code
format. If it is, then proceed with replacing the course catalog type
and number from the section’s name. If not, then simply combine the
offering code with the section name as the section code.
Remove spinner console log message

Remove a console.log statement printing out spinner objects.
Store org units returned by myenrollments API call

The org units returned from calling
`/d2l/api/lp/1.4/enrollments/myenrollments/` are stored in
GradesExport.orgData.orgUnitsById so that the information can be used
later. This is especially important for section codes, which don’t seem
to be available otherwise.
Use stored section information from enrollments for section code

Replace the code that guesses section codes with a lookup on the
orgUnits returned from fetching myenrollments. Additionally, if a
course section is not in myenrollments, it is not presented as an
option.
Set section enrollments for known sections from sections call

When retrieving the sections for each course offering, check if the
returned sections are known, and set the enrollments to the returned
section’s enrollments if so. This makes it possible to fetch a
section’s enrollments without going back to D2L later on.