Add support for OpenGL float textures

In addition to floating point textures, this PR also improves the GLSL backend in several important ways:

- Adds support for optional OpenGL features, either via extensions or by querying the version number.
- Proper support for  one- and two-channel images (either via texture_rg extension or OpenGL >= 3.0)
- improve compatibility with modern OpenGL versions (vertex array objects are required when using OpenGL > 3.1 but unavailable in earlier versions)
- better runtime code for opening an OpenGL context on Linux (use legacy glX API only when nothing else is supported)

Please take a look
Should this be an error? I think I saw a halide_printf and converted it to a print when I was walking through this code, but this looks like an error condition.