Unable to trap EADDRINUSE
When doing `app.listen()` and the listening port is already in use, it will always terminate the program. I could not find a way to catch error. I tried `try/catch` isn't working. I also tried `app.on('error', ...)`, also with no effect. The callback to `app.listen` is also not called with an error object.

To reproduce the issue
```
app.on('error', err => {
  // Not reached with EADDRINUSE
  console.log('error event', err.message);
});
try {
  app.listen(8080, () => {
    // Not reached with EADDRINUSE
    console.log('listen callback', err.message);
  });
}
catch(err) {
  // Not reached with EADDRINUSE  
  console.log('listen catch', err.message);
}
```

Error message:
<pre>
events.js:287
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE: address already in use :::8080
    at Server.setupListenHandle [as _listen2] (net.js:1313:16)
    at listenInCluster (net.js:1361:12)
    at Server.listen (net.js:1449:7)
    at Application.listen (.../node_modules/koa/lib/application.js:82:19)
    at main (.../my_server.js:36:11)
    at .../my_server.js:71:5
</pre>
