Migrate unlocking feature from old autograder.

This pull requests implements the unlocking functionality from the old autograder. The `Protocol` is not yet implemented (I'll do this in a separate pull request).

Some code for the grading protocol has also been rewritten to be more consistent (including the introduction of an `OkConsole` abstract class).

This resolves #53 .
Lines and outputs can depend on the environment (and any modifications to environment made by student code) in which they are evaluated.

Also, I suspect most students will only be grading one question at a time, so there shouldn't be a need to evaluate all of the TestCases. Evaluating on demand would save work.