This is a (currently naive) rebase of #16323, which is a rework of #16175, which is a rework of #12934. Built on top of #17479.
Currently validationinterface_tests/unregister_all_during_call
fails.
Goals:
- Add as much documentation as possible to aid with review
- Split up commits as much as possible to aid with review