Exam infrastructure, normalized admin table

This is an interim checkin of work that is nearly complete.
Goodies include:

* Admin table now contains a proper adminID, with the
  former "adminID" keys set in a new "adminKey" column.
  Comments are now linked to commenter via the static
  adminID value (rather than commenter's screen name),
  so the screen name can be changed freely without orphaning
  existing comments.

* Exams can be cast from a random sample of past quiz questions
  assigned to the class. The UI support still needs some tweaking,
  but exam creation is working. Exams initially have a "sent"
  value of -1, rather than the ordinary default of 0.

* Infrastructure for printed exams is nearly there. The
  LaTeX code has been worked out, and the code for generating
  it from a quiz is in place, but we need some code to run
  LaTeX multiple times to resolve the formatting -- the
  "latex" module in npm only runs once, and ignores
  graphics files, which isn't going to work for us.