* This lets us distinguish framebuffer object 1 on context A from
FBO 1 on context B.
* At the moment we assume that all shareable objects are shared between
all contexts. I think this is sensible and fairly common, but it will
break if some contexts don't share as the objects will alias.
* This is really a spot optimisation but I have a feeling it might be
useful for more programs.
* If a program uses a single VAO and updates the attrib pointers/enables
and disables them, then this will prevent an unbounded number of chunks
building up pointlessly while READING and pushing into the record.
* A 'better' fix for this would be to gather pointer/enabled state as
initial contents and not tracking any of this except for in CAPFRAME,
but that isn't happening at the moment.
* Normal selector functions are implemented via these, which requires
EXT_direct_state_access to be available, but this isn't hard to work
around with some wrapper functions should that become necessary.
* Remove legacy wrapped functions that were only hacked-in to get
glxgears working as a proof of concept.
* Split out groups of wrapped functions into separate files by type