Implement Delegate parts of #24024
This one got a little bit messy because until we move all the way away from inheritance there are some methods that need to be overwritten, so the `@delegate_names` calls are a bit more verbose than in #24024.