[AutoDiff] Don't propagate activity through '@noDerivative' projections. (#27472)
Reads or writes to `@noDerivative` properties of struct should not be differentiated. At the implementation level, this amounts to not propagating activity through `@noDerivative` projections. This has been done in some of usefulness propagation, but there are two places where this has not been done:
* In `DifferentiableActivityInfo::propagateUsefulThroughBuffer`, usefulness was being propagated arbitrarily regardless of the instruction.
* In `DifferentiableActivityInfo::recursivelySetVaried`, variedness was set regardless of whether the proejction is a `@noDerivative` one.
This patch changes activity analysis to not propagate activity through `@noDerivative` field projections from a struct, covering both previously uncovered places discussed above. As a result, `PullbackEmitter::getAdjointBuffer` no longer needs to check for `@noDerivative` or emit any diagnostics.
Resolves [TF-865](https://bugs.swift.org/browse/TF-865).