Use TcpListener instead of direct Socket

We switch the listener to the TcpListener class instead of using a socket
directly. It has a simplified interface and good APIs for async and await.

Signed-off-by: Marcus Karlsson <mk@acc.umu.se>
Accept clients using await

We recently switched to TcpListener. With it we can use await instead of
the callback based asynchronous API. That will simplify the code and
remove the need for AsyncCallback.

Signed-off-by: Marcus Karlsson <mk@acc.umu.se>