gl_generator: implement fallbacks based on aliases

These aliases are already present in the XML, so we might as well use them! As
OpenGL evolves and is extended, it frequently occurs that a vendor introduces
an extension, giving a function a name like `glFooNV` or `glFooAMD`. Then, it
gets proposed to the ARB and is renamed `glFooEXT`. Then, this extension gets
standardized and is placed in the core profile and is once again renamed to
its final name, `glFoo`.

For Mesa, they implement various extensions and then finally support an OpenGL
version once all extensions have been implemented. Many OpenGL features can be
implemented entirely in the driver, or on most hardware even if the hardware
doesn't support enough features for a specific OpenGL version. So you get
situations where older GPUs only expose OpenGL 2.1, but implement almost every
extension that is present in OpenGL 3.3.

So, when `glFoo` can't be loaded but it has known aliases, try also loading
those aliases before giving up.

Closes #150
![](http://img2-3.timeinc.net/ew/dynamic/imgs/080418/trees/Lord-of-The-Rings-Tree_l.jpg)