ooni: Add support for manual TLS/SSL handshakes to tls_handshake.py
The previous version of nettests/experimental/tls_handshake.py used Twisted/pyOpenSSL's do_handshake() method, which rather automagically handles handshaking without allowing any control or insight into the steps taken, which parameters (such as the client ciphersuite list, or which TLS/SSL context method) are set. Because of that, it is impossible to tell where or why a handshake fails, which would be incredibly useful information for helping to determine how Tor is being censored in any given place.
To implement this, we will need to manually handle stepping through OpenSSL's memory BIO state machine asynchronously...a quite non-trivial task.
I believe this is important, and the tls_handshake test is not nearly as useful as it could be without it.