Connection.cs: wait on AsyncWaitHandle immediately before closing it.

Follow-up to 6dfda81a78d23845fe555c4b349af83bf434f057.

TcpClient.Close() can, as such, throw and expose the race in question back
again. Resolve by waiting on AsyncWaitHandle immediately before closing it.