cache _eval_derivative for Add and Mul

The system in #8191 solves about twice as fast with the caching implemented here. Is this a good or bad idea?

@pbrady, @moorepants