add caching for quiz statistics json api endpoint

fixes CNVS-13648

test plan:
  - setup a quiz with students and a handful of submissions (the more the better)
    (maybe use quizard to throw in a couple hundred)
  - make a GET request to /api/v1/courses/{courseId}/quizzes/{id}/statistics
  - the first request will be fairly slow
  - subsequent requests should be significantly faster

  - we want to make sure that changes are reflected correctly in the results.
    cache is invalidated if things change with quiz submissions, and a good
    indication that the cache was invalidated was that we get that slow initial
    request again (and the new data is reflected in the refreshed stats)
  - things we should check to make sure they invalidate the cache (to make sure
    we don't see stale versions of things in the cached results)
    - different quizzes should get different results
    - when we edit the quiz we could potentially get different results
      (such as changing from keep highest to keep latest)
    - when we regrade
    - when a new submission is made

  - statistics should not have to be regenerated if a different teacher views
    the same quiz's statistics page.

Change-Id: I9888cccaf4d1e9480000af8cee1a4717350fc430
Reviewed-on: https://gerrit.instructure.com/36653
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Jason Madsen <jmadsen@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Product-Review: Derek DeVries <ddevries@instructure.com>