QuizLogAuditing - JS core

- workflow for modular event tracking
- two basic event trackers: PageFocused and PageBlurred
- events are buffered, and are stored in localStorage when possible
  - they will also be (re)loaded when the page is reloaded
- events can be submitted in bulks to the API

backend changes:

  - renamed "answers" column to "event_data"; answers is now an alias
    for nicer API when dealing with EVT_QUESTION_ANSWERED events
  - renamed EVT_ANSWERED to EVT_QUESTION_ANSWERED for consistency with
    how we're naming events
  - API now accepts and stores the "event_data" attribute
  - The optimizer in the Snapshot parser is now more aggressive; it will
    do as many passes as needed to achieve 0 data redundancy

Closes CNVS-16177

TEST PLAN
---- ----

  - create a quiz
  - take it
  - open the developer's console, go to the Resources tab and also leave
    the console open (i left some messaging in to make this easier)
    - move the cursor out of the window then back in
    - look at the console, you should see messages like
      "Enqueuing event ... for delivery"
    - click the little reload/refresh icon in the dev tab
      + verify you see an entry called "qla_events"
      + the value of this entry should be a JSON that looks something
        like what's shown below
    - in a few seconds, if you look at the Network tab, you will notice
      a request to a URL like
      "/api/v1/courses/1/quizzes/1/submissions/1/events"
    - (optional) look up the records in the database and verify they
      make sense (don't really need to do this if the request was
      successful :)

Sample of PageFocused and PageBlurred events serialized in localStorage:

    [
      {
        "type": "page_focused",
        "created_at": "2014-10-09T14:55:50.887Z"
      },
      {
        "type": "page_blurred",
        "created_at": "2014-10-09T14:55:51.131Z"
      }
    ]

Change-Id: I7efbbef281faece5df90f09c299bfa3260abcff6
Reviewed-on: https://gerrit.instructure.com/42466
Tested-by: Jenkins <jenkins@instructure.com>
QA-Review: Trevor deHaan <tdehaan@instructure.com>
Reviewed-by: Derek DeVries <ddevries@instructure.com>
Product-Review: Derek DeVries <ddevries@instructure.com>