Use jQuery.ajaxTransport to record and replay AJAX requests

* Goal is to separate client-side performance bottlenecks from
  server-side / request-latency issues
* Uses sessionStorage or localStorage to record results between page
  views
* By default, does nothing.
* `GGRC.RequestStoreDoRecord()` will enable recording and refresh
* `GGRC.RequestStoreDoReplay()` will enable replay and refresh
* `GGRC.RequestStoreDoNothing()` will disable recording and replaying
Improve GGRC.RequestStore

* Encapsulate better
* Allow simultaneous record and replay (to handle request signature
  changing due to timing issues with replay.)
* Don't auto-reload when changing state
* Limit cached requests to just "GET" requests
* Change API:  GGRC.RequestStore.<method>:
  - `set_record(true/false)`
  - `set_replay(true/false)`
  - `pause()` -> `set_record(false); set_replay(false)`
  - `clear()`
Merge remote-tracking branch 'origin/develop' into feature/client-record-replay
Trigger sticky-footer recalculation via events

* `updateSticky` triggers recalculation of sticky footers; it does *not*
  recalculate sticky headers, because that will always require a scroll
  event
* trigger `udpateSticky` on expand/collapse and tree insertion
Add infinite-scroll to modal selector popups

* Extract infinite-scroll handling functionality to `InfiniteScroll`
  controller which simply triggers `scrollNext` events
* Explicitly create the controllers onExplicitly create the controllers
  `.sub-level` and `.selector-list` elements
* Refactor, slightly, the scrolling logic in selector lists
Fix TreeView for subtrees in Audit widget

* Handle case where `display()` is called before controller element is
  added to DOM
* Explicitly call `display()` on subtrees when they may be re-rendered
  due to live binding (mostly subtrees in `Request`, `Response`)
Fix mimetype check

* Some browsers (Firefox) include "; charset=UTF-8" in the
  `Content-Type` header, so our previous `Content-Type` check failed.
  Flask's `request.mimetype` parses this correctly, so use that instead
  of checking `Content-type` header directly.
Merge pull request #1173 from reciprocity/feature/fix-tree-redisplay

Fix TreeView for subtrees in Audit widget
Merge pull request #1174 from reciprocity/feature/infinite-scroll-selectors

Add infinite-scroll to modal selector popups
Merge pull request #1175 from reciprocity/feature/sticky-triggers

Trigger sticky-footer recalculation via events
Merge pull request #1176 from reciprocity/feature/fix-mimetype-check

Fix mimetype check
Merge remote-tracking branch 'origin/develop' into feature/client-record-replay
Comment out log messages in default execution path

* This way, this can be merged to `develop` without impacting deployed
  behavior
Made post-audit-import hook for creating folders slightly more robust
p/60486842 Sped up certain counts on PBC requests subtree headers
Move `GGRC.RequestStore` to its own file; add commentary
Merge pull request #1177 from reciprocity/feature/client-record-replay

Client record/replay
Merge pull request #1179 from reciprocity/feature/post-import-failure-handling

Minor fixes for post-request-import GDrive hook
Don't apply the Ajax Transport layer until requested
Merge pull request #1181 from reciprocity/feature/initial-disable-client-record-replay

Don't apply the Ajax Transport layer until requested