gosrc: Use unmodified clone URL from import meta tag for cloning.

This fixes a regression in #353 that caused vcs.download to fail for
some valid go gettable packages because an incorrect clone URL value
was being used.

The clone URL value had a possible ".git" suffix trimmed, which is not
correct according to how remote import path resolution is documented at
https://golang.org/cmd/go/#hdr-Remote_import_paths.

Fixes #356.
diff --git a/gosrc/gosrc.go b/gosrc/gosrc.go
index 9ae9fca..a4b6a9c 100644
--- a/gosrc/gosrc.go
+++ b/gosrc/gosrc.go
@@ -331,6 +331,7 @@
 	}
 	proto := repo[:i]
 	repo = repo[i+len("://"):]
+	repoVCS := im.repo[i+len("://"):]
 	dirName := importPath[len(im.projectRoot):]
 
 	resolvedPath := repo + dirName
@@ -341,6 +342,7 @@
 			"dir":        dirName,
 			"importPath": importPath,
 			"repo":       repo,
+			"repoVCS":    repoVCS, // repoVCS is like repo, but without the vcs suffix trimmed.
 			"scheme":     proto,
 			"vcs":        im.vcs,
 		}
diff --git a/gosrc/vcs.go b/gosrc/vcs.go
index ce872f9..81f9ee0 100644
--- a/gosrc/vcs.go
+++ b/gosrc/vcs.go
@@ -101,7 +101,7 @@
 
 type vcsCmd struct {
 	schemes  []string
-	download func([]string, string, string) (string, string, error)
+	download func([]string, string, string, string) (string, string, error)
 }
 
 var vcsCmds = map[string]*vcsCmd{
@@ -117,11 +117,11 @@
 
 var lsremoteRe = regexp.MustCompile(`(?m)^([0-9a-f]{40})\s+refs/(?:tags|heads)/(.+)$`)
 
-func downloadGit(schemes []string, repo, savedEtag string) (string, string, error) {
+func downloadGit(schemes []string, repo, repoVCS, savedEtag string) (string, string, error) {
 	var p []byte
 	var scheme string
 	for i := range schemes {
-		cmd := exec.Command("git", "ls-remote", "--heads", "--tags", schemes[i]+"://"+repo)
+		cmd := exec.Command("git", "ls-remote", "--heads", "--tags", schemes[i]+"://"+repoVCS)
 		log.Println(strings.Join(cmd.Args, " "))
 		var err error
 		p, err = outputWithTimeout(cmd, lsRemoteTimeout)
@@ -158,7 +158,7 @@
 		if err := os.MkdirAll(dir, 0777); err != nil {
 			return "", "", err
 		}
-		cmd := exec.Command("git", "clone", scheme+"://"+repo, dir)
+		cmd := exec.Command("git", "clone", scheme+"://"+repoVCS, dir)
 		log.Println(strings.Join(cmd.Args, " "))
 		if err := runWithTimeout(cmd, cloneTimeout); err != nil {
 			return "", "", err
@@ -183,12 +183,12 @@
 	return tag, etag, nil
 }
 
-func downloadSVN(schemes []string, repo, savedEtag string) (string, string, error) {
+func downloadSVN(schemes []string, repo, repoVCS, savedEtag string) (string, string, error) {
 	var scheme string
 	var revno string
 	for i := range schemes {
 		var err error
-		revno, err = getSVNRevision(schemes[i] + "://" + repo)
+		revno, err = getSVNRevision(schemes[i] + "://" + repoVCS)
 		if err == nil {
 			scheme = schemes[i]
 			break
@@ -212,7 +212,7 @@
 		if err := os.MkdirAll(dir, 0777); err != nil {
 			return "", "", err
 		}
-		cmd := exec.Command("svn", "checkout", scheme+"://"+repo, "-r", revno, dir)
+		cmd := exec.Command("svn", "checkout", scheme+"://"+repoVCS, "-r", revno, dir)
 		log.Println(strings.Join(cmd.Args, " "))
 		if err := runWithTimeout(cmd, cloneTimeout); err != nil {
 			return "", "", err
@@ -271,7 +271,7 @@
 
 	// Download and checkout.
 
-	tag, etag, err := cmd.download(schemes, match["repo"], etagSaved)
+	tag, etag, err := cmd.download(schemes, match["repo"], match["repoVCS"], etagSaved)
 	if err != nil {
 		return nil, err
 	}