Make dischargeFmv handle Deriveds
A Derived CFunEqCan does not "own" its FlatMetaTv (fmv), and should not
update it. But one caller (canCFunEqCan) was failing to satisfy the
precondition to dischargeFmv, which led to a crash (Trac #15170).
I fixed this by making dischargeFmv handle Deriveds (to avoid forcing
each caller to do so separately).
NB: this does not completely fix the original #15170 bug, but I'll
explain that on the ticket. The test case for this patch is actually
the program in comment:1.