Tidy up code

This is a work in progress with lots of clean up, but I thought it would be good to create the pull request now to give everyone more visibility into what I'm working on.

So far:

 - cleaning up pubsub code to be less un-necessarily variadic.  I've also added type checking for the assumptions, hopefully reducing the odds of mistakes elsewhere.
 - Remove the extensions from `require`.  This will make it easier to change files between plain js and jsx in the future.
 - Update the README.  There are far fewer pre-requisists now.  It really just needs node.js and npm installed.  By only telling people to interact via npm scripts (rather than gulp), it would be easier to switch away from gulp in the future, and we are also not depending on what version of gulp people happen to have installed globally.

Next:

 - We have a few modules that just get `require`d in without being used for anything.  They do all their work when they're required.  This feels very contrary to how you would expect JS to work.  I think this is to do with the self-registration process, but it would be good to find a better way of working.
 - We have no tests, so I'm going to look into test frameworks.