This was completed in #8044 (closed) and #8353 (closed). It implements asynchronous handling of OpenSSL's memory BIO state machine to manually transverse TLS/SSL handshaking steps, and it includes methods for setting the client ciphersuite list, the TLS/SSL context method, and includes reporting for whether the connection or the handshake failed.
The handshake steps, because they are manually handled, could potentially include reported of the number of SSL_ERROR_WANT_READs or SSL_ERROR_WANT_WRITES we have on a connection, but I've not implemented this yet (though there is reporting on the number of TLS/SSL renegotiations) and it would not be too difficult to add.
I am marking this as 'needs review' until the code attached to #8044 (closed) and #8353 (closed) gets reviewed and merged.
This was merged in commit 4fdbd6214a8f09d56de0598146d3f6ce760e8d77, and the tls_handshake.py test has multiple switches for testing different SSL/TLS contexts, and providing a custom ciphersuite list (by default it tests TLSv1 with TBB's current ciphersuite list).