Rework the handling to attach to the game socket instead of hacking the
WebSocket prototype. This means we can just piggy-back on the data
processing it does instead of hand-rolling it.
Now that we can rebuild the entire object graph from each tick delta,
track events through `actionLog`s instead of guessing at what's
happening.
Use the WebAudio API to get rid of the sound limit, apply gain, and
"scatter" around sounds so they don't overlap too much.
Add 'heal' sound effect, move the icon inline with the other buttons and
save the sound effect state in `sessionStorage`. This keeps it active
while navigating in one tab, but it still defaults to disabled on open.