[V5] Inspect fallback doesn't handle `undefined` properly

### Summary

There are two instances in crystal that use `inspect`:

1. https://github.com/graphile/crystal/blob/main/grafast/grafast/src/inspect.ts
2. https://github.com/graphile/crystal/blob/main/utils/graphile-config/src/resolvePresets.ts#L25

When bundling my app as ESM, `require`-ing `utils` seems to fail so we fallback to the custom implementation.
However, that implementation does not handle `undefined` properly, it returns `undefined` instead of the string `"undefined"`, this causes errors in `toStringMeta` later on.

### Possible Solution

I've currently hacked it by patching this line:
```
? JSON.stringify(obj)
```
to be
```
? (obj === undefined ? "undefined" : JSON.stringify(obj))
```
but there are likely better solutions.
I also see that the `graphql` has an implementation under `graphql/jsutils/inspect`, perhaps a fallback to that before the custom fallback would also be a good option.
