Make all initialization asynchronous

This replaces a bunch of synchronous XHR calls, which are bad practice and are only there because I was lazy and trying to get things up and running.

Rather than using something more heavyweight like Promises, I opted for Mike Bostock's lightweight Queue library: https://github.com/mbostock/queue.

It works but is not yet ready to merge, still need to address some ugly flickering when recompiling/rebuilding (try the effect switcher in the demo to see).

@iwillig  - you'll probably be interested in this. It still feels messy, open to other approaches.

Since pieces of the GL process (like program compilation) are now async, these methods can't function properly until the process is complete. So officially, these methods should not be called until initialization is done (which triggers a callback/event).