Provide a new lifecycle method to hook on via an ApolloServerPlugin to pass a GraphQL schema on-the-fly to the ApolloServer.
### Our situation:
We have one single ApolloServer and a single database backing the server.
So, Apollo Router or Federation Gateway is not an option for us.

### The usecase: 
Although we have just one database, we have different 'domains' or 'namespaces' within our GraphQL schema. Not every user is allowed to see / execute everything. We do NOT want to disable introspection in production environment because it is a good way to learn what the API provides for externals. Also, code generation for clients should be possible according to the introspection result.
Each API consumer has to authorize by provding e.g. a token within each request. Depending on that, we decide what he is allowed to see / execute from our GraphQL schema.

So, we need to change the used schema of the ApolloServer on each request depending on the requesting user.

Currently we do this within the `context()` function by calling:
````javascript
// Set up our Express middleware to handle CORS, body parsing,
// and our expressMiddleware function.
app.use(
    contextPath,
    cors(),
    bodyParser.json(),
    // expressMiddleware accepts the same arguments:
    // an Apollo Server instance and optional configuration options
    expressMiddleware(apolloServer, {
      context: async ({ req }) => {
         let newSchema = // get new schema here
         apolloServer.internals.state.schemaManager.processSchemaLoadOrUpdateEvent({apiSchema:newSchema }, ApolloServer.generateSchemaDerivedData(newSchema));
      }
    })
}
````
But this is clearly a bad hack and not intended to do.

### Our request: 
Provide a new lifecycle method to hook on to pass a schema on-the-fly to the ApolloServer.
This plugin method could be called right before `runPotentiallyBatchedHttpQuery` is called within `ApolloServer.ts`.
At this point the schema is passed as an argument to this method by invoking `runningServerState.schemaManager.getSchemaDerivedData()`.

Maybe there is another good option / solution we didn't think of?