[AutoDiff] Add SIL differentiability witnesses. (#27487)
SIL differentiability witnesses are a new top-level SIL construct mapping
"original" SIL functions to derivative SIL functions. They will replace SIL
function `[differentiable]` attributes, additionally enabling cross-module
retroactive derivative registration.
SIL differentiability witnesses have the following components:
- Original `SILFunction`.
- Linkage.
- Parameter indices (`IndexSubset`).
- Result indices (`IndexSubset`).
- Derivative generic signature (optional).
- JVP `SILFunction` (optional).
- VJP `SILFunction` (optional).
- "Is serialized?" bit.
This patch adds the `SILDifferentiabilityWitness` data structure, along with
parsing, printing, verification, and serialization (including lookup by key).
The TF-866 master issue tracks follow-up, including SILGen and differentiation
transform changes.