Unifying the differentiation modes
Today, Swift AD has two separate transforms that produce forward mode derivatives (JVPs) and reverse mode derivatives (VJPs).
We can generalize this to a single transform that produces a single "derivative function" that can evaluate derivatives in both modes.
The "derivative function" is generic over a "derivative type" that determines the derivative mode.
The advantages over the existing system are: