Implement base class for storing OpaqueKeys.

The keys are meant to have a variety of types (which are known to the
consuming application), and a varieties of implementations of each type
(which are transparent to the consuming application).

Particular key types can specify their own required methods, but
the only global requirement of an opaque key is that be serializable
to unicode.
Add base classes for opaque keys to be used by LMS, Studio, and the modulestores
Implementation of old-style keys as OpaqueKeys (Location and course_id)
Change Locators into UsageKeys and CourseKeys
Fix all uses of UsageKeys and CourseKeys, and all of their tests.