Looking for guidance/best way to allow post-processing of GatewayExecutionResult after executor has completed but before plugins are called
In Apollo Server 3, our codebase was able to extend ApolloServer, and in it override the _start function to allow us to wrap the gateway executor with some custom code:

```
   protected async _start(): Promise<void> {
        const result = await super._start();
        this.requestOptions.executor = decorateExecutor(
            this.requestOptions.executor
        );
        return result;
    }
```

With Apollo Server 4, this is no longer possible without disabling typescript's prevention of accessing the private this.internals where the executor is now stored:

```
   public async start(): Promise<void> {
        const result = await super.start();
        // @ts-ignore 
        this.internals.gatewayExecutor = decorateExecutor(
            // @ts-ignore
            this.internals.gatewayExecutor
        );
        return result;
    }
```

Can Apollo restore this capability through having a formal approved interface to allow customers to a post-hook (and potentially even pre-hook) around the executor BEFORE the plugin interface cycle kicks in:

### PRIMARY NEED : POST HOOK - 
The first plugin lifecycle that we have access to after the executor would be `didEncounterErrors`, and all the registered plugins are invoked async, and unfortunately our use case is the decorator above conditionally adding additional errors, so this plugin is not sufficient... we need to add the errors before didEncounterErrors are called
 
### ADDED BENEFIT IF PRE/POST HOOKS WERE AVAILABLE
If we had hook access to pre/post execute() or executor processing, we could also add datadog custom trace spans in place, allowing us to instrument nearly identical to what you have done in the Gateway executor for opentelemetry -- which unfortunately is not leverageable by your customers using dd-trace-js library from Datadog.