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.