Koa middleware does not call next() for all scenarios
<!-- Before opening an issue: if you use `npm` try running `yarn` instead; if
      you run `yarn`, please try running `npx yarn-deduplicate && yarn`. -->

### Summary

Koa middlewares run sequentially, and each middleware calls next() function after using or updating the ctx (KoaContext). The issue with the grafast middleware that is added here ([koa/v2/index.ts](https://github.com/graphile/crystal/blob/91e87ab6516490a4cc7b7fc6400efb7623fbd331/grafast/grafserv/src/servers/koa/v2/index.ts#L70)) is that it only calls next() in some scenarios, and not all. In theory, all scenarios of a middleware should call next, unless it's a catastrophic error.

Once this is enabled, it allows the overall koa app to process something after grafast. This could be things like collecting metrics or logging.

### Steps to reproduce
Sample code
```typescript
  const app = new Koa();
  const pgl = postgraphile(configuration, pool);
  const serv = pgl.createServ(grafserv);
  
  const server = app.listen(port);
  await serv.addTo(app, server);

  app.use(async (ctx, next) => {
    // this will never be called for most requests
    console.log("running middleware after grafast");
  })

```

### Expected results

We should always call the next() middleware in the chain of Koa middlewares.

### Actual results

Currently, we only call next middleware if result from graphile is `null`
https://github.com/graphile/crystal/blob/91e87ab6516490a4cc7b7fc6400efb7623fbd331/grafast/grafserv/src/servers/koa/v2/index.ts#L79-L81

### Solution

PR here for the fix: https://github.com/graphile/crystal/pull/2073

Call next no matter what, from the grafast/graphile middleware (see PR above)
