Support Custom Equality and Diff in Assert and Require
Description
Update assert to compare data structures that are isomorphically equal (such as a Tree, Trie, etc) to one another, but not equal by value or reference.
Proposed solution
Define an Equal and Diff interface that structures can implement that the require/assert package will check on equality assertion (e.g. require.Equal(t, expected, actual)) rather than using DeepEqual.
Use case
Currently, the Cilium codebase uses a require.Truef as a workaround, calling into a custom Equals method and a custom Diff method.
We are definately not going to change Equal to compare values any differently to how it does today, mostly because it is a breaking change.
Partly also because changing the definition of "equal" has led to issues before, as with the EqualValues assertion's problems. I'm also concerned that types will unintentionally satisfy this interface, time.Time from the standard library has an Equal method and it does not mean that the instances are equal, only that they represent the same instant.
Is there a way of proposing this as a compatible change with a reasonable level of safetly?