Grafast not reusing operation plans from previous requests?
<!-- Before opening an issue: if you use `npm` try running `yarn` instead; if
      you run `yarn`, please try running `npx yarn-deduplicate && yarn`. -->

<!-- You can also chat with us on Discord: http://discord.gg/graphile -->

### Summary

This is a question we have about the expectations of grafast and optimizations during operation plan creation.

We noticed that most of the time (close to 50%) in our node server was spent in these two functions/files in grafast:
- grafastPrepare (`prepare.js`)
- establishOperationPlanFromEvent

When reading the documentation for grafast, under "[Getting the operation plan](https://grafast.org/grafast/request-overview#getting-the-operation-plan)", it seems like operation plans should be saved for future use and optimizations.

> When an operation is seen a future time, Grafast looks for an existing operation plan whose constraints fit the request. If there is one then this operation plan can be executed, otherwise a new operation plan is created (see previous paragraph).

However, after profiling what the cpu does for each request, it seems like the operation plans are only reuse when the **operation body AND variables** are exactly the same. Is this expected?

### Additional context

#### How to replicate:
1. Run a small postgraphile/grafast server
2. Issue a small request with variables:
```graphql
query GetPost($id: ID!) {
  post(id: $id) { title }
}

{ "id": 1 }
```
3. Issue the same request, with different variables:
```graphql
query GetPost($id: ID!) {
  post(id: $id) { title }
}

{ "id": 2 }
```
4. All steps for preparation of operation plans (`prepare.js`) are performed, all over again

If in step 3, we send `{ "id": 1 }` again as variables, then the `prepare.js` is skipped, and it jumps to `execute.js` directly.

I'm happy to provide even more additional context if necessary, but this is easy to replicate with any small server that can run postgraphile with PG. 

#### Versions used
```
# postgraphile / grafast
"postgraphile": "^5.0.0-beta.25",
"grafast": "^0.1.1-beta.10",
"grafserv": "^0.1.1-beta.12",
"graphile": "^5.0.0-beta.25",
"graphile-build": "^5.0.0-beta.20",
"graphile-build-pg": "^5.0.0-beta.24",
"graphile-config": "^0.0.1-beta.8",
"graphile-migrate": "^1.4.1",
"graphile-utils": "^5.0.0-beta.24",
"@graphile-contrib/pg-omit-archived": "^4.0.0-beta.3",
"@graphile-contrib/pg-simplify-inflector": "^6.1.0",
"@graphile/simplify-inflection": "^8.0.0-beta.5",

# pg
"pg-sql2": "^5.0.0-beta.6",
"pg": "^8.12.0",
```

#### Screenshots of profiling
Request 1

![request 1](https://github.com/user-attachments/assets/863f6584-716f-4707-9015-27fe9f361f19)

Request 2

![request 2](https://github.com/user-attachments/assets/5065ca19-006f-4d77-9544-21c38e7ca91d)

Command used:
```
node --cpu-prof --use-strict app.js
```