Field Overrides

Architecture for arbitrary field overrides, field overrides for
individual students, and a reimplementation of the individual due date
feature.

This work introduces an architecture, used with the 'authored_data'
portion of LmsFieldData, which allows arbitrary field overrides to be
made for fields that are part of the course content or settings (Mongo
data).  The basic architecture is extensible by means of writing and
configuring arbitrary field override providers.

One concrete implementation of a field override provider is provided
which allows for overrides to be for individual students.  This provider
is then used as a basis for reimplementing the individual due date
extensions feature as a proof of concept for the design.

One can imagine writing override providers that provide overrides based
on a student's membership in a cohort or other similar idea.  This work
is being done, in fact, to pave the way for the Personal Online Courses
feature being developed by MIT, which will use an override provider very
much long those lines.
@cpennington That must not be exactly right.  I'm getting: KeyError: 'course_id'

/edx/app/edxapp/venvs/edxapp/src/opaque-keys/opaque_keys/__init__.py line 318 in <genexpr>
      if all(value == existing_values[key] for (key, value) in kwargs.iteritems()):
   KeyError: 'course_id'