add polling session and submission apis

fixes CNVS-12474, CNVS-12477, CNVS-12478
this commit fleshes out the API endpoints for polling sessions and
submissions, and solidifies the other polling endpoints.

Test plan
- Full tests on the following endpoints:
  - Polls are the basic data model of the polling app.  They can take a
    question attribute and a description attribute. They are only
    creatable and modifiable by teachers.

    - GET /api/v1/polls (index action)
    - POST /api/v1/polls (create action)
    - GET /api/v1/polls/:id (show action)
    - PUT /api/v1/polls/:id (update action)
    - DELETE /api/v1/polls/:id (destroy action)

  - Poll choices belong to polls. They consist of the particular answers
    a submitter can choose when participating in a poll session.  They
    have attributes of text (the answer text), their associated poll,
    and an 'is_correct' boolean attribute.  The 'is_correct' attribute
    show not be accessible by students.  Poll choices are only creatable
    and modifiable by the creator of the poll.

    - GET /api/v1/polls/:poll_id/poll_choices (index action)
    - POST /api/v1/polls/:poll_id/poll_choices (create action)
    - GET /api/v1/polls/:poll_id/poll_choices/:id (show action)
    - PUT /api/v1/polls/:poll_id/poll_choices/:id (update action)
    - DELETE /api/v1/polls/:poll_id/poll_choices/:id (destroy action)

  - Poll sessions are for publishing a poll so that it can accept
    submissions.  They should only be createable / modifiable by
    teachers. Only students that are enrolled in the associated course
    of the poll session should be allowed to view them.
    The show action of a poll session acts differently for a teacher.
    They are able to see the results of the voting that has taken place
    by students since the session was published.

    - GET /api/v1/polls/:poll_id/poll_sessions (index action)
    - POST /api/v1/polls/:poll_id/poll_sessions (create action)
    - GET /api/v1/polls/:poll_id/poll_sessions/:id (show action)
    - PUT /api/v1/polls/:poll_id/poll_sessions/:id (update action)
    - DELETE /api/v1/polls/:poll_id/poll_sessions/:id (destroy action)
    - GET /api/v1/polls/:poll_id/poll_sessions/:id/publish (publish action)
    - GET /api/v1/polls/:poll_id/poll_sessions/:id/close (close action)

  - Poll submissions are for submitting an answer for a particular poll
    session.  A student should only be allowed to submit a poll choice
    for a session they're able to view, and they can only submit one
    poll choice per poll session.

    - GET /api/v1/polls/:poll_id/poll_sessions/:poll_session_id/poll_submissions/:id (show action)
    - POST /api/v1/polls/:poll_id/poll_sessions/:poll_session_id/poll_submissions (create action)

Change-Id: Ifcfd72ec30597e37fc54c687fb7d61a644d7348c
Reviewed-on: https://gerrit.instructure.com/34605
Reviewed-by: Derek DeVries <ddevries@instructure.com>
Tested-by: Jenkins <jenkins@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Product-Review: Josh Simpson <jsimpson@instructure.com>