io.sockets.secure: new hook variable ssl-certificate-verification-supported?

t if the backend is able to verify certificates, f
otherwise. Currently certificate validation isn't implemented on Windows
io.files.windows: new generic words drain and refill, like in io.backend.unix

The purpose of these words is to abstract out the pushing of the bytes
to the ports so that you can insert the ssl layer in between. Exactly
like how drain and refill are specialized on ssl-handle in
io.sockets.secure.unix.
io.sockets.secure.windows: reading and writing from ssl sockets

Unified the drain and refill generics and put their definition in
io.files. They are now used by both the windows and unix ssl backend
for io. Windows ssl kind of works now, but the error cases are not
implemented correctly.
libc.*, unix.*: move constants and functions from the unix namespace to libc

The E* errno and SIG* constants are defined on Windows too, so they
should be in the libc vocab which is available there. They will be
used for SSL error handling.
io.sockets.secure.*: unification of lots of platform-independent code

Code that is duplicated in the backends moved to
io.sockets.secure.openssl. The wait-for-fd verb used by do-ssl-accept
doesn't have any equivalent on Windows so that needs to be
implemented.
io.files: make wait-for-fd generic and dispatch depending on backend

do-ssl-accept need to call wait-for-fd so it needs to be generic. On
windows it's a noop but on unix it will wait for the fd.
libc: several vocabs now need to depend on libc
libc.*: add platform files
libc: fix vocab definition of platform dependent parts of libc
io.sockets.secure.openssl: do-ssl-connect needs to call wait-for-fd
Merge:
io.sockets.secure.windows: use non-blocking sockets to prevent
SSL_connect from blocking

On Windows, SSL_connect may hang forever if the server doesn't send any
data. To counteract that we temporarily set the socket non-blocking and
then call select in the wait-for-fd method.

Conflicts:
	basis/io/sockets/secure/openssl/openssl-tests.factor
windows.winsock: use the windows api types instead of int and void*
where applicable
windows.winsock: fix the definition of SOCKET_ERROR and unit tests that
verifies its correctness
io.sockets.windows: wrap ioctlsocket and related constants to enable
setting sockets in non-blocking mode
io.sockets.secure.openssl: Fix using list.
io: need to use libc for OS X?
more libc fixes.
libc: test "1 strerror" since zero gives different output on different platforms.
libc: fix tests using.
imap: Add some combinators, fix up some docs, add docs, fix up unit tests.