Add shell base question

Also include DictDiffer code bororwed from StackOverflow.
Add shell question subclass: NewVariable

This tests for one or more new values present in the environment after
allowing the user to type in a shell.
Add the data field to NewVariableQuestions
Add utility for slugifying strings
Add demo course infrastructure and demo course
Add utility for running arbitrary courses
Add new_console hook in ShellQuestion
Add runcourse flag to only print course info
Issue #6, make it easier to require attributes
Merge remote-tracking branch 'origin/f.demo' into f.demo
Add new YAML for new quesiton type
Add GetValue question

This turned out to be a gigantic project in and of itself, and requires
a hell of a lot of under-the-hood modification. Featured here are:

- Extensive subclassing of code.InteractiveConsole
- Hacking codeop.CompileCommand to give us precedence
- Double-parsing user input, once with AST
- Modifying ASTs on the fly to add callbacks directly into user code
- Generators!