Add functions for OpenGL context management.

They are designed to minimize the total number of contexts by attempting to bind contexts to new windows whenever possible.
They also allow binding a context without an appropriate window. The resulting context may be bound to any possible window, so all rendering operations should ONLY be done on FBOs.