Generalize Prelude.Fin.Weaken to arbitrary differences

This used to make totality checking really slow, but recent fixes have resolved that.