Node's internal errors aren't properly handled by koa's onerror handler in some situations
In some cases, such as running tests in Jest, Node's internal errors such as PREMATURE_CLOSE (from the stream module) aren't properly handled by this code:
https://github.com/koajs/koa/blob/9ee65843d9be96329a3279c63657c2970e260acf/lib/context.js#L113

A bit of debugging showed me that despite that they're Errors, the `instanceof Error` call returns false. My guess is that they're not using the same `Error` object (different globals maybe?).

As a result, this is the error I get:
```
Error: non-error thrown: {}","stack":"Error: non-error thrown: {}
    at Object.onerror (/home/julien/travail/git/profiler-server/node_modules/koa/lib/context.js:115:40)
    at onerror (/home/julien/travail/git/profiler-server/node_modules/koa/lib/application.js:163:32)
    at processTicksAndRejections (internal/process/task_queues.js:93:5)"
```
This is working properly out of the jest environment though. The same error when running the server directly:
```
Error [ERR_STREAM_PREMATURE_CLOSE]: Premature close
    at LengthCheckerPassThrough.onclose (internal/streams/end-of-stream.js:61:15)
    at LengthCheckerPassThrough.emit (events.js:215:7)
    at LengthCheckerPassThrough.EventEmitter.emit (domain.js:476:20)
    at emitCloseNT (internal/streams/destroy.js:68:8)
    at processTicksAndRejections (internal/process/task_queues.js:79:21)
```
But this makes things confusing when finding such an error while working on tests for an app.

Would you be open changing this check using `Object.prototype.toString.call(err) !== '[object Error]'`? Or maybe use both checks to make sure we catch all cases? Any downsides?