3.0 entity deep errors

Implements the proposed API in #3807. I didn't build out `allErrors()` as I don't fully understand how it would be used.
I thought it was odd to refer to an interface from the trait. If the trait is included in a class, that class will satisfy the interface requirements here.