This commit makes a lot of sweeping changes. It mostly refactors the
previous design to instead be one that uses channels for a lockless
design that doesn't require so much sticky Mutex locking logic.
It also ensures that we always update the waker if we aren't Ready. This
is necessary because if the future gets moved to a different thread by
the executor, we need to update the waker regardless.
We only update the waker if the new waker is different, which should
help ensure we don't flood the waker channel.
We also now clean up entries after responding, which should help in
cases where an overly aggressive server sends duplicate responses.