Fix quiz questions from banks

This patch makes it so that whenever we generate a submission that pulls
questions from a QuestionBank, we are assured that we're dealing with
QuizQuestion objects. Retroactively, a data fixer is installed that will
process every submission on hot points like the API readers if they
happen to have bad data.

There are a lot of comments in the additions which should give you more
context.

Huge refactors:

- Quiz is no longer responsible for "preparing" its question data, nor
  generating questions for submissions. That's now delegated to the
  QuizQuestionBuilder

Closes CNVS-17412

TEST PLAN
---- ----

  - create a crazy quiz with all sorts of things:
    a) single questions,
    b) question groups with manual questions
    c) question groups tied to question banks
    d) question groups that have questions from banks and others
       manually created
    e) multiple attempts so we can verify versioning is not affected
  - MAKE SURE that you can get some questions duplicated (even if it
    takes you a couple of attempts), you can achieve this by creating 1
    group that is linked to a bank, and another group that has 1 or more
    questions from that same bank (and possibly other banks) - keep
    trying the quiz until you get a duplicate
  - take the quiz both as a student and a teacher, and do it multiple
    times
    + verify all the answers to the questions are as you entered
    + ON DUPLICATES: provide different answers, and make sure that all
      answers were recorded
    + go over all the submission-related pages and verify everything is
      still rendering
    + use the API to read the quiz, its questions, and the submissions
      and verify that all endpoints are functional

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