[AutoDiff] Add `Differentiable.zeroTangentVectorInitializer`. (#28416)
The `Differentiable.zeroTangentVectorInitializer` requirement will enable
correct, efficient reverse-mode differentiation of struct property accesses.
A `zeroTangentVectorInitializer` closure is more efficient than a
`zeroTangentVector` computed property, which would always capture `self`.
Add `Differentiable.zeroTangentVector` default instance property, which
returns `self.zeroTangentVectorInitializer()`.
Todos:
- Implement derived conformances for `zeroTangentVectorInitializer`.
- Implement differentiation transform support for `zeroTangentVector` and
struct/tuple projection instructions.