Base library for OpaqueKeys [partial commit]

This commit is the base library for OpaqueKeys.

These keys are now objects with a limited interface, and the particular
internal representation is managed by the data storage layer (the
modulestore).

For the LMS, there should be no outward-facing changes to the system. The keys
are, for now, a change to internal representation only. For Studio, the new
serialized form of the keys is used in urls, to allow for further migration in
the future.

Co-Author: Andy Armstrong <andya@edx.org> Co-Author: Christina Roberts
<christina@edx.org> Co-Author: David Baumgold <db@edx.org> Co-Author: Diana
Huang <dkh@edx.org> Co-Author: Don Mitchell <dmitchell@edx.org> Co-Author:
Julia Hansbrough <julia@edx.org> Co-Author: Nimisha Asthagiri
<nasthagiri@edx.org> Co-Author: Sarina Canelake <sarina@edx.org>

[LMS-2370]