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 #464, like getting rid of local strorage and allow specifying uniforms/attributes before the source code is set.

This closes #464, closes #510, closes #450, closes #338, closes #407, closes #351

## Overview of changes that this PR makes

All gloo objects:
* No more activate, deactivate methods. No more handle and target properties. Only an id property.
* Gloo objects are context aware. They are associated with the context that is current at the moment of instantiation. If no context is active, they are associated to a "pending context" which will become in use by the first app.Cancas that requests a canvas. This means all our examples still work. 

Program:

* The API of Program changes WRT attributes and uniforms. There are no more `active_uniforms`. Just a function to get info on *all* variables in shading code. 
* There are no variable objects, `variable.py` is gone. These objects served mainly for deferred setting of values. The GLIR command queue takes over this function.
* There are no more VertexShader and FragmentShader classes, `shaders.py` is gone. It turns out that shaders do not really have a function other then temporarily existsting to compile the code. Vispy programs should now have more GPU memory available. Just call `program.set_shaders()` to set source code.
* There are now also warnings when attributes/uniforms are set that are not active. Due to this I found some unnecessary lines of code in some examples.

Buffer:

* No more local storage. This means that setting discontinuous data does not work anymore. Much simpler code though.
* As a consequence data cannot be set on views.
* No more automatic conversion. Passing float64 is not allowed. Or should we convert in this case?

Texture:

* There is no more local copy.
* Passing float64 is not allowed.
* You can use `set_size` with completely different size and format.
* You can now use `set_data` using any type and shape.
* Texture does not support views anymore.

## Outstanding questions for gloo API

* We now have ColorBuffer, RenderBuffer, and StencilBuffer only to save passing one argument to RenderBuffer. Should we keep it like this, or should we remove these classes? 
* Should GLOO accept enums?

## Outstanding questions for GLIR spec

* The command to select a framebuffer is now called `USE`. Maybe this should be `FRAMEBUFFER`.
* What should `(FRAMEBUFFER, <id>, False)` do? Set the current framebuffer to 0, or make the previous framebuffer active? 
* Should GLIR pass enums by string or int? There seem to be more people in favor of strings.

## Work to do after this

* There is a call to glGetViewport in text.py. This needs to be removed; we need to get viewport from the event instead.
* GPU objects must be deleted when Gloo objects get cleaned up. I won't be surprised if that will cause problems, so let's do this after Vispy with the current changes seems stable. 
* Uniform arrays #345

IIRC this is only necessary to set the state back to what it was before SDF rendering was performed. I'm not even 100% sure this is necessary when rendering to a Framebuffer, I did it to be safe. If I activate a Framebuffer and set the viewport there, does that viewport setting persist when I deactivate the framebuffer? If not, then I don't think we'll need the `orig_viewport` at all here.