[AutoDiff] Support differentiation of `switch_enum`. (#25509)
Handle `switch_enum` terminator during VJP and adjoint generation.
Necessary step for differentiating `for-in` loops, which contain
optional iterator `next()` values.
Diagnose differentiation of active enum values, which requires
further adjoint generation support.