Returning new context rather than modifying
I'm still fairly new to Koa, and I want to better understand some of its design decisions. In particular, when first learning about Koa, it seemed to me that it could have easily taken a more functional approach. For instance, consider the following example from the README:

```javascript
app.use(ctx => {
  ctx.body = 'Hello Koa';
});
```

Instead, the Koa API could have been designed so that this was written to return a new context rather than making modifications:

```javascript
app.use(ctx => {
  return {...ctx, {body: 'Hello Koa'}};
});
```

From my perspective, this could add benefits such as making it easier to test middleware (no need to mock functions on the context) as well as playing better with composition chains and functional styles in general. I have a lot to learn about Koa, and I'm curious to know if this has ever been considered. If so, why wasn't it pursued? If not, what are people's opinion of an approach like this?