Implement support for allowing vendor libraries to overwrite libglvnd entrypoints

Vendor libraries may wish to override the default libglvnd entrypoints with custom code for performance reasons. The following series of changes implements the infrastructure to make this possible.

Commit 69c1d70 refactors mapi's assembly dispatch generation to be more general-purpose, allowing libglvnd to restore the default entrypoints when no context is current.

Commit fdf67a7 defines the ABI that vendor libraries may use to write custom code to libglvnd's entrypoints.

This optimization may cause conflicts if a process attempts to make current to more than one vendor's context at the same time, when one or more of those vendors implements custom entrypoint code. To work around this issue, users may set the __GLVND_DISALLOW_PATCHING environment variable to turn this optimization off.