Leverage Message Forwarding Fast-Path for Delegation

These commits migrate manually calling the specific delegates to a generic approach that uses message forwarding, which results in a significant reduction of code.
Another nice side-effect is that whenever new methods are added to UIApplicationDelegate, they only need to be added to the appropriate sub-protocol, once—forwarding then happens automatically, as soon as the concrete delegate implements the new method.