net: don't throw on net.Server.close()

When `close()` is called on a non-listening server, a synchronous error is thrown. This commit causes the error to be passed to the asynchronous callback function instead.

Closes #7295
Closes #7324