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.

Should any / all of these be `raise NotImplementedError` for safety? Maybe they should all be, and if a class wants a no-op, then they can explicitly override.