net: use windows ConnectEx to dial (when possible)

Update #2631.
Update #3097.

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/7061060
diff --git a/src/pkg/net/fd_unix.go b/src/pkg/net/fd_unix.go
index 6d8af0a..cfe6df2 100644
--- a/src/pkg/net/fd_unix.go
+++ b/src/pkg/net/fd_unix.go
@@ -288,6 +288,15 @@
 	return pollservers[k]
 }
 
+func dialTimeout(net, addr string, timeout time.Duration) (Conn, error) {
+	deadline := time.Now().Add(timeout)
+	_, addri, err := resolveNetAddr("dial", net, addr, deadline)
+	if err != nil {
+		return nil, err
+	}
+	return dialAddr(net, addr, addri, deadline)
+}
+
 func newFD(fd, family, sotype int, net string) (*netFD, error) {
 	if err := syscall.SetNonblock(fd, true); err != nil {
 		return nil, err