Emit component type in keys for processed_course

Emit the component type (e.g.: L for lecture) so that it is possible to
select based on component type.
Fix course_AB to not output .

The course_AB component filters out digits from the course number to
extract the full-year AB part. However, this can result in an
extraneous . (period) being left over. Filter out the period, too.
Filter to desired courses in xml4_offering

Expand the predicate in xml4_offering to get exactly what should be
outputted for D2L offerings. Previously, this was mixed into the
underlying view.
Propagate predicate conditions to template/section

Copy the predicate conditions from xml4_offering to xml4_template and
xml4_section. The same conditions apply.
Extend xml4_document to allow seq doc checks

Add options to xml4_document so that callers can optionally specify a
function that can control whether a document should be sent, compared
to the previous document in sequence.
Eliminate check_sequential_docs argument

The check_sequential_docs flag is redundant. It can be inferred from
whether check_f is null or not.
Store previous_row only if predicate && check_f

Only store previous_row if predicate and check_f passed. That is,
previous_row is the previous sent row, not the previous row fetched.
Reduce duplicates in xml4_template

Implement a check_f function that checks if the current row represents
the same course as the previous row. Skips if so.
Remove component type from view key

The addition to the key was made to allow selection by component type,
but results in an undesirable sort order. Revert back to just system
and course code as the view key.