Intermediate structure wrapping SSL on sockets
To open the discussion on a solution approach for #731 .
A (relatively) conservative way to solve having "IO duck types" being passed to an SSLSocket, would be to use BIO_mem. This seems to be how python infrastructure deals with it as well.
In order to do so, the socket needs to hold the rbio and wbio somewhere. This is achievable by creating the internal structure holding ssl variables, which holds the SSL object for now, and can latter be used to access the bios as well.
connect/read/write/close operations can then be rewritten to contain a conditional path to deal with sslsockets holding bios (which means, it holds an "IO quack").
Wrapping the SSL struct should be unnecessary. SSL has the ex_data to store an arbitrary data with it, and in ruby/openssl, every SSL struct has a corresponding SSLSocket object, so we can use its instance variables storage too.