Trigger failed_auth as before, once for each failed method
Trigger failed_all_auth once all method failed
Trigger no_auth only if we couldn’t even try one method
Scheduled events, connection, TLS handshake (with STARTTLS), read and write
on the socket are all done using only asyncio.
A lot of threads, and thread-related (and thus useless) things still remain.
This is only a first step.