add caching for the quizzes#index api endpoint
add caching for the quizzes#index api endpoint

fixes CNVS-13647

test plan:
  - make a GET request to the /api/v1/courses/{courseId}/quizzes endpoint
  - the first request will take a couple seconds
  - subsequent requests should be about 8x-10x as fast (around 200-250ms range)
  - try this out with different per_page options such as
    - api/v1/courses/1/quizzes?per_page=50
  - once again it will be slow the first request, but then all subsequent
    requests are faster

  - we want to make sure that changes are reflected correctly in the results.
    cache is invalidated if things change in the quizzes, and a good indication
    that the cache was invalidated was that we get that slow initial request
    again
  - 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 quiz results)
    - if the course id changes, we should get different results
    - if we edit details on a quiz
    - if we add a quiz
    - if we delete a quiz
    - if we send a jsonapi style request vs a non-jsonapi style request
    - if we add a search term to the params
      - api/v1/courses/1/quizzes?search_term=title
    - if we get a different page of the quiz results
      - api/v1/courses/1/quizzes?page=2
    - if we change the per_page value for returning quiz results
      - api/v1/courses/1/quizzes?per_page=50
    - if we visit the quiz results as a different user

  - make sure results for students and teachers are different and respect
    the correct permissions

Change-Id: I26f76ff9ace99ac168d3dd7a0cdaeb8550c8e655
Reviewed-on: https://gerrit.instructure.com/36596
Tested-by: Jenkins <d95b56ce41a2e1ac4cecdd398defd7414407cc08@instructure.com>
QA-Review: Caleb Guanzon <54fa1f30d451e4f3c341a8f3c47c9215fd0be9c6@instructure.com>
Reviewed-by: Josh Simpson <bfb4987b134a00f73d881fff5113b1d5fa1876bc@instructure.com>
Product-Review: Derek DeVries <ff87a0776152510efd53bb1f4ea089dbbc90e730@instructure.com>

Jyaasa/canvas-lms,ShreniiNepal/shrenii_lmp,Unow/canvas-lms,whalejasmine/canvas-lms,ShreniiNepal/shrenii_lmp,grahamb/canvas-lms,Rvor/canvas-lms,SwinburneOnline/canvas-lms,shidao-fm/canvas-lms,tgroshon/canvas-lms,shidao-fm/canvas-lms,venturehive/canvas-lms,samuels410/greatlakes-lms,tgroshon/canvas-lms,gbleydon/canvas-lms,gbleydon/canvas-lms,kyroskoh/canvas-lms,whalejasmine/canvas-lms,skmezanul/canvas-lms,AndranikMarkosyan/lms,wye0220/shindig-canvas,fronteerio/canvas-lms,greyhwndz/canvas-lms,utkarshx/canvas-lms,djbender/canvas-lms,Unow/canvas-lms,AndranikMarkosyan/lms,va7map/canvas-lms,redconfetti/canvas-lms,kyroskoh/canvas-lms,va7map/canvas-lms,SwinburneOnline/canvas-lms,eCNAP/CANVAS,samuels410/greatlakes-lms,wrdsb/canvas-lms,venturehive/canvas-lms,HotChalk/canvas-lms,va7map/canvas-lms,instructure/canvas-lms,juoni/canvas-lms,roxolan/canvas-lms,whalejasmine/canvas-lms,HotChalk/canvas-lms,antoniuslin/canvas-lms,AndranikMarkosyan/lms,jay3126/canvas-lms,skmezanul/canvas-lms,Rvor/canvas-lms,juoni/canvas-lms,sdeleon28/canvas-lms,instructure/canvas-lms,eCNAP/CANVAS,snehakachroo1/LSI_replica,narigone/canvas,snehakachroo1/LSI_replica,matematikk-mooc/canvas-lms,jay3126/canvas-lms,Jyaasa/canvas-lms,djbender/canvas-lms,matematikk-mooc/canvas-lms,efrj/canvas-lms,wrdsb/canvas-lms,greyhwndz/canvas-lms,sfu/canvas-lms,sfu/canvas-lms,wye0220/shindig-canvas,dgynn/canvas-lms,redconfetti/canvas-lms,redconfetti/canvas-lms,gbleydon/canvas-lms,narigone/canvas,sdeleon28/canvas-lms,sfu/canvas-lms,matematikk-mooc/canvas-lms,dgynn/canvas-lms,djbender/canvas-lms,wye0220/shindig-canvas,antoniuslin/canvas-lms,sfu/canvas-lms,dgynn/canvas-lms,sdeleon28/canvas-lms,wrdsb/canvas-lms,Rvor/canvas-lms,va7map/canvas-lms,juoni/canvas-lms,fronteerio/canvas-lms,SwinburneOnline/canvas-lms,juoni/canvas-lms,efrj/canvas-lms,instructure/canvas-lms,eCNAP/CANVAS,matematikk-mooc/canvas-lms,kyroskoh/canvas-lms,redconfetti/canvas-lms,ShreniiNepal/shrenii_lmp,sfu/canvas-lms,kyroskoh/canvas-lms,tgroshon/canvas-lms,roxolan/canvas-lms,fronteerio/canvas-lms,snehakachroo1/LSI_replica,efrj/canvas-lms,utkarshx/canvas-lms,instructure/canvas-lms,samuels410/greatlakes-lms,eCNAP/CANVAS,djbender/canvas-lms,skmezanul/canvas-lms,shidao-fm/canvas-lms,tgroshon/canvas-lms,AndranikMarkosyan/lms,efrj/canvas-lms,HotChalk/canvas-lms,snehakachroo1/LSI_replica,sdeleon28/canvas-lms,instructure/canvas-lms,roxolan/canvas-lms,dgynn/canvas-lms,samuels410/greatlakes-lms,grahamb/canvas-lms,leftplusrightllc/canvas-lms,sfu/canvas-lms,narigone/canvas,grahamb/canvas-lms,Jyaasa/canvas-lms,grahamb/canvas-lms,wrdsb/canvas-lms,SwinburneOnline/canvas-lms,narigone/canvas,utkarshx/canvas-lms,ShreniiNepal/shrenii_lmp,greyhwndz/canvas-lms,instructure/canvas-lms,jay3126/canvas-lms,antoniuslin/canvas-lms,leftplusrightllc/canvas-lms,instructure/canvas-lms,roxolan/canvas-lms,jay3126/canvas-lms,shidao-fm/canvas-lms,greyhwndz/canvas-lms,fronteerio/canvas-lms,whalejasmine/canvas-lms,leftplusrightllc/canvas-lms,venturehive/canvas-lms,Unow/canvas-lms,grahamb/canvas-lms,utkarshx/canvas-lms,sfu/canvas-lms,Jyaasa/canvas-lms,leftplusrightllc/canvas-lms,antoniuslin/canvas-lms,HotChalk/canvas-lms,Rvor/canvas-lms,skmezanul/canvas-lms,venturehive/canvas-lms