ui: Remove UserInterface.display_results()

Having quizzer.cli.main() calling ui.display_results() does not
translate well to an HTML-based UI.

CommandLineInterface now displays results as part of its .run()
implementation.
ui.cli: Import UserInterface with an underscore

For a cleaner namespace.
quizzes/monty-python: Fix JSON error (missing comma in copyright)

This fixes a typo introduced in 5909e7f (quiz: Add copyright metadata,
2013-02-15).
cli: Teach quizzer.cli.main() the --ui option

This uses the new quizzer.ui.INTERFACES and quizzer.ui.get_ui() to
select from among the available interfaces (currently just the command
line interface).
question: Question.check() now returns (correct, details)

When the answer is correct, details will be None.  When the answer is
incorrect, details may be None or an explanatory message that provides
details about why the answer is incorrect.  This is mostly useful for
`ScriptQuestion`s, where the difference between the answered and
expected output streams may help diagnose errors.

The details are returned as a string (instead of, for example, logging
them in invocation_difference) so they will be easy to display in user
interfaces that aren't built around the command line.
ui.wsgi: Add a preliminary WSGI/HTML user interface

The basic WSGI handling (e.g. HandlerErrorApp and WSGI_DataObject) is
largely based on code I'd written for Bugs Everywhere.
quizzer: Add user keys to the answer database and stack

Instead of:

  answerdb[question.id] = [list, of, answers]
  ui.stack = [list, of, questions]

Now we have:

  answerdb[user.name][question.id] = [list, of, answers]
  ui.stack[user.name] = [list, of, questions]

This will allow us to use a single answer database and stack for a
multi-user interface (e.g. WSGI).  I've added the appropriate upgrade
rules to update existing answer databases once we bump to v0.4.

To reduce redundancy and ease future maintenance, I also factored out
AnswerDatabase._get_questions() from .get_unanswered() and friends.

There's a bit of hackery to deal with the default None user in the
answer database.  Because JSON objects (the equivalent of Python's
dicts) are keyed by strings, you get things like:

  >>> import json
  >>> json.dumps({None: 'value'})
  '{"null": "value"}'

We avoid this and preserve the None key through a save/load cycle by
replacing it with the empty string.  This means that you shouldn't use
the empty string as a user name when interacting with the database
from Python, and we'll raise a ValueError if you try to do that
through AnswerDatabase-specific methods.
ui.wsgi: Close the text-input tag
quizzer: Add ChoiceQuestion.display_choices

This gives us more traditional multiple-choice questions.
quizzer: Add ChoiceQuestion.open_ended

This allows us to ask open-ended multiple-choice questions, like:

  Pick one:
  1) Answer-1
  2) Answer-2
  or fill in something else
  quizzer? Answer-3
question: Move ChoiceQuestion.open_ended to Question.accept_all

Accepting all answers is a more general case of an open ended multiple
choice question.  It also allows us to ask questions that are
difficult or impossible to grade automatically.  We just record the
student's answer for the grader to look at later.
quizzes/software-carpentry-pre-assessment: Automate the pre-assessment

From swcarpentry/assets [1], as of 4a6d554 (Importing a whole bunch of
old material relevant to Software Carpentry, 2012-12-20).

[1]: https://github.com/swcarpentry/assets/blob/master/assessment/5.1/wilson-pre-assessment-2012-11.html