gbm: split the DRI backend into a separate library and unify backend handling
This does a few things:
- Applications linked against a non-matching GBM can load the right version of the backend from the environment, avoiding GBM/Mesa version mismatches in many cases
- Distros that want to split off libgbm into a separate package from the actual drivers get to not ship 40MB of libgallium_dri
- The loader logic becomes way less complex
See also: https://github.com/NixOS/nixpkgs/pull/338109 for original rationale.
CC @karolherbst @emersion with who we discussed this a bit on IRC; @zmike who did a lot of DRI/GBM refactoring recently.