WIP: Ripping gloo in two via GLIR

This PR refactors gloo to break it in two pieces, one is the high level gloo interface, which generates GLIR commands. The other is the GLIR interpreter.

In the progress I will also fix some outstanding issues with gloo, as described in #465, like getting rid of local strorage and allow specifying uniforms/attributes before the source code is set.

I wasn't sure why you have both `cmd, id = command[:2]` and `args=command[2:]` above, I assumed it was for efficiency...? Seems like this could just be `... self._classmap[cmd]` since you've already effectively split `args` above.