Internal: Change Contact::assign_paper interface.

- Rather than $reviewer, take $reviewer_cid and $reviewer_email
  (separate arguments). This is cleaner and makes it obvious what
  exactly is required.
- Infer $reviewer_email from PC membership when appropriate.
- Change method name to indicate new signature.
Whoops
Correct assignment Javascript (non-assignments caused errors).
Internal: Assigner update.

An AssignmentState object encapsulates the current set of
assignments for all papers. We prepare an assignment by making
changes to the proposed state, which starts out as a copy of the
current state. We then prepare a diff between the current state
and the proposed state, and show that. This has a couple
advantages. For instance, we could allow users to upload a bulk
assignment that *replaces* the current assignment.

Also fix some bugs. Create new users outside LOCK TABLES.
Clean up some printouts. Etc.