This makes it possible to pass in an SSLEngine, SSLContext or set of PEM files. It also significantly refactors the wrapper and leaves the default methods async.