Generalize keyboard shortcuts JS

Our first pass at adding keyboard shortcuts was very specific to just
one part of the app: reviewing snapshots as part of a sweep. However, we
want to make keyboard shortcuts a fully-integrated part of the app, so
we will need a more generalized solution.

This commit is my attempt at a more generalized solution for keyboard
shortcuts. The basic idea is to, on any keypress that happens outside of
an input, check the page for elements that have a
data-keyboard-shortcut attribute that matches the keycode. If that
element has an href attribute, we simply follow the link.

This means that whenever we want to add a new keyboard shortcut
somewhere, we simply need to add this data attribute to the link that we
want to attach it to. This should make this system flexible and easy to
manage.

Change-Id: I8c0fead152134655258dd5409db0e53d7021e6b8
Change page:before-change event to page:fetch

The page:before-change event is apparently only fired from Turbolinks
when a link is actually clicked. Since we are accessing the Turbolinks
API directly, when handling keyboard shortcuts, we are loading new pages
but were not seeing the loading indicator. To fix this, I am changing
this event listener from the page:before-change event to the next one in
line, page:fetch. This event is triggered when Turbolinks starts to
fetch the target page, according to their documentation.

Change-Id: I9e36355e22a8f14fe60094f9ecc33687c2afbb40