Rewrite the module system to do dynamic loading manually

This fixes crashes involving missing configuration files on some systems
by preventing multiple copies of the same library being loaded. glinject
now uses GLINJECT_CONSTRUCTORS and GLINJECT_DESTRUCTORS environment
variables to determine what to execute. GLXOSD now reads the
GLXOSD_PLUGINS environment variable to determine which plugins to load.