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
In this case it was simply a merge error. I found a few other places where I used a newline at the end of an error message. I'm fine with either convention, but it might make sense to aim for consistency and make debug(), print() and error() all behave the same wrt. newlines.