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.

Framebuffer

* ColorBuffer, DepthBuffer and StencilBuffer are no more. Just use RenderBuffer. You do not have to specify the format, as the FrameBuffer will do this when attaching (if format is None).
* Deactivating a FrameBuffer will make the *previous* framebuffer active. This is the job of the GLIR implementation, because in gloo you may not always have access to this information.

## Outstanding questions for GLIR spec

* 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

One simple solution is to optionally allow specifying the viewport state to
set at the end of SDF rendering. If None, current behavior (query). If
provided, don't query and use the provided one. I think in the text visual
for example we will have access to the viewport dimensions via the
transform system somehow, no?