Rework MulticastDelegate.Equals to use a loop instead of recursion.

This should aid in tracking down bugs such as #11871 (or possibly even
fixing them) - if the problem still exists the process will run into
an infinite loop, which is a lot easier to debug (at least on iOS, and
likely other platforms too) than a stackoverflow.