Break out course key fields into event context

Event log consumers parsing events may not have the opaque-keys library available in the execution environment they are using to analyze the tracking logs and/or may not even be python based. In order to simplify the analysis, and hopefully prevent string parsing of the identifier, we split out the various fields of the course key and store them alongside the serialized key in the context.

Reviewers: @rocha @brianhw @cpennington
The values that are guaranteed to be in any `CourseKey` instance are those which are marked with `abstractproperty` on the `CourseKey` base class. The values that define a key (for equality, for instance), are those attributes stored in the `.KEY_FIELDS` class attribute of the particular implementation class (although if you use those, you should also record `.CANONICAL_NAMESPACE`, which specifies which key instance type you're actually working with).

If you want to get even more abstract, you could also record `.KEY_TYPE`, which would tell you what kind of key (course, usage, etc). you're looking at.