asyncio: Synchronize with Tulip

* Issue #159: Fix windows_utils.socketpair()

  - Use "127.0.0.1" (IPv4) or "::1" (IPv6) host instead of "localhost", because
    "localhost" may be a different IP address
  - Reject also invalid arguments: only AF_INET/AF_INET6 with SOCK_STREAM (and
    proto=0) are supported

* Reject add/remove reader/writer when event loop is closed.
* Fix ResourceWarning warnings
diff --git a/Lib/asyncio/windows_utils.py b/Lib/asyncio/windows_utils.py
index aa1c064..2a196cc 100644
--- a/Lib/asyncio/windows_utils.py
+++ b/Lib/asyncio/windows_utils.py
@@ -36,12 +36,25 @@
 
     Origin: https://gist.github.com/4325783, by Geert Jansen.  Public domain.
     """
+    if family == socket.AF_INET:
+        host = '127.0.0.1'
+    elif family == socket.AF_INET6:
+        host = '::1'
+    else:
+        raise ValueError("Ony AF_INET and AF_INET6 socket address families "
+                         "are supported")
+    if type != socket.SOCK_STREAM:
+        raise ValueError("Only SOCK_STREAM socket type is supported")
+    if proto != 0:
+        raise ValueError("Only protocol zero is supported")
+
     # We create a connected TCP socket. Note the trick with setblocking(0)
     # that prevents us from having to create a thread.
     lsock = socket.socket(family, type, proto)
-    lsock.bind(('localhost', 0))
+    lsock.bind((host, 0))
     lsock.listen(1)
-    addr, port = lsock.getsockname()
+    # On IPv6, ignore flow_info and scope_id
+    addr, port = lsock.getsockname()[:2]
     csock = socket.socket(family, type, proto)
     csock.setblocking(False)
     try: