[AutoDiff] Support differentiation of loops.
- Change predecessor enum generation to support loops.
- Generate indirect predecessor enums for BBs in loops.
- Handle boxed payloads of indirect enums.
- Traverse basic blocks in post-order post-dominance order.
- This is necessary for computational correctness.
- Add loop tests (`for-in`, `while`, nested).