Extract events from quiz submission snapshots

Closes CNVS-15880

- a new model, QuizSubmissionEvent, for tracking events done during a
  quiz-taking session
- utilizes the quiz question answer serializers to maintain JSON
  representations of the students' answers, which are stored in the
  :answers DB column (also in JSON)
- events can be optimized to track only what has really changed between
  snapshots of a quiz submission
- all exported records are tagged with the "answered" event type (this
  is currently all we have without josh's patch)
- a few fixes were needed for the serializers to function, primarily
  adding (no)support for FileUpload and TextOnly questions so they don't
  blow up

Extras:

- a new convenience rake task, canvas:quizzes:dump_events that can be
  used by support to produce a JSON dump of all the events in a single
  quiz submission (for tracking student behavior)
- another rake task, canvas:quizzes:generate_events_from_snapshots, for
  use by developers for migrating data in QuizSubmissionSnapshots to
  QuizSubmissionEvents for a single quiz (or many). This will hit the DB

TEST PLAN
---- ----

There's no UI in this commit, only touches the DB. You can still test if
you like:

  - make sure you got some data logged before you check out this patch:
    + create a quiz and take it by a student, choose different answers
      so you log some actions, and then:
  - check out the patch
  - run `bundle exec rake db:migrate`
  - run the command below[1] to generate a JSON dump of the events and
    view it for integrity

[1] bundle exec rake canvas:quizzes:dump_events[quiz_submission_id,out]
    - replace "quiz_submission_id" with the ID of the student submission
    - replace "out" with some path to store the JSON in, like
      "./events.json"

Change-Id: Ifd8a43a66aba99780428623b956d868d87e53215
Reviewed-on: https://gerrit.instructure.com/41999
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Derek DeVries <ddevries@instructure.com>
QA-Review: Trevor deHaan <tdehaan@instructure.com>
Reviewed-by: Ryan Taylor <rtaylor@instructure.com>
Product-Review: Ahmad Amireh <ahmad@instructure.com>