Written TCP asynchronous client to abstract "protocol" from TCP handling