don't set header when `respond=false` and header sent
many people using `next.js` or migrate there app from express will set `respond=false`, but lots of koa's middleware will set header like:

```js
async (ctx, next) => {
    await next();
    ctx.set('foo', 'bar');
}
```

it will cause `Can't set headers after they are sent` error if we already sent response body before. Maybe we can make `ctx.set()` invalid when `respond=false` and header sent. (We can log something when NODE_ENV is develop to hint developer this unexpected behavior)

related issues: 

- https://github.com/koajs/session/pull/95
- https://github.com/koajs/session/issues/89

Any thoughts?