HIGHLEVEL BESTLEVEL HIGHLEVEL BESTLEVEL HIGHLEVEL BESTLEVEL HIGHLEVEL BESTLEVEL HIGHLEVEL BESTLEVEL HIGHLEVEL BESTLEVEL HIGHLEVEL BESTLEVEL HIGHLEVEL BESTLEVEL HIGHLEVEL BESTLEVEL

Removing `TcpSocket` in favor of `AsyncSocket`, a better wrapper around `Socket` that sets out to accomplish its goals of giving Socket's Async API a touchup to work with tasks.

The problem is, the returned `Task`s from `AsyncSocket` for the *`Async` functions all erase the input information (`SocketAsyncEventArgs`).
This makes it impossible -- without recreating another `SocketAsyncEventArgs` -- to chain function calls using the returns from the Task.
Instead, you have to manually keep track of the `SocketAsyncEventArgs` and tie it to whatever operation you're doing, which should
be easy enough with `await` and all the stuff being in the same function. We'll see how it ends up going.
( Why not allocate a new "SocketAsyncEventArgs", you ask? The whole point of SocketAsyncEventArgs was for servers to reuse arguments
so they don't throttle the Garbage Collector: going back to allocating a fresh one with every operation mostly perverts that attempt. )