Add generic support for parameter overrides

One of the major features of PlanOut is that it simplifies testing by allowing users to keep certain parameters fixed, through a feature known as "overrides".  These changes bring full support for overrides to Assignment, Experiment, and Interpreter objects.  When overrides are used in conjunction with the interpreter, the right-hand side is evaluated lazily, allowing developers to "mock" particular variables or checks (that may rely on other services).

Test plan: All changes have unit tests to demonstrate the expected behavior. All other unit tests pass.