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
errors aren't supposed to need the newline. It's a string describing the error that gets passed to halide_error. The idea is that the application may want to do something with that error string (e.g. embed it in a larger message) which the newline makes annoying. Other calls to error in the runtime don't include the newline. However, looking at the default halide_error implementation, no newline is added. This is a problem. I haven't noticed it when jitting because the jit's implementation of halide_error *does* add a newline. I need to fix this. I'll change it to add a newline, unless you believe strongly that the newline should be explicit in each call to error.