Large redesign and refactor of how event listening and messaging work.
Now, rather than content scripts instantiating message listeners and
waiting for the background.js to request page data from them, I have
reversed the whole mechanism. Now the background keeps a message
listener running to listen for page data messages sent from content
scripts - and content scripts are only injected on 'wikipedia.org/wiki'
URLs. The result is that page data can now get collected when the DOM
finishes loading, and also reduces the amount of code running in the
background (no more listeners getting instantiated on every content
page). Should be a big improvement.