[libc++] Create a small DSL for defining Lit features and parameters
This allows defining Lit features that can be enabled or disabled based
on compiler support, and parameters that are passed on the command line.
The main benefits are:
- Feature detection is entirely based on the substitutions provided in the TestingConfig object, which is simpler and decouples it from the complicated compiler emulation infrastructure.
- The syntax is declarative, which makes it easy to see what features and parameters are accepted by the test suite. This is significantly less entangled than the current config.py logic.
- Since feature detection is based on substitutions, it works really well on top of the new format, and custom Lit configurations can be created easily without being based on config.py.
Differential Revision: https://reviews.llvm.org/D78381