Skip nulls when deriving course_section

The list functions for xml4_offering and xml4_section concatenate
code_info.components[5] and [6] to create course_section. Modify the
concatenation to check and skip parts that are null.

Fixes #8.
Extract member_id from sourcedid.id if !userid

If the member document does not specify a role.userid value, extract
the member_id by parsing sourcedid.id.

Fixes #9.
Explicitly derive canonical/system course code

For Destiny One originated data, explicitly construct the
system_course_code and canonical_course_code instead of assuming that
course_code has the proper values. Continuing Education membership
feeds contain course codes appended with _SEC.

Fixes #10.