Update failure message format.
Use small interfaces to be more flexible.
Add support for non-comparable types
Demonstrate deep equality output.