Set temporary env vars properly rather than setting/unsetting
diff --git a/gexec/build.go b/gexec/build.go
index e798900..462f033 100644
--- a/gexec/build.go
+++ b/gexec/build.go
@@ -24,25 +24,24 @@
 Build uses the $GOPATH set in your environment.  It passes the variadic args on to `go build`.
 */
 func Build(packagePath string, args ...string) (compiledPath string, err error) {
-	return BuildIn(os.Getenv("GOPATH"), packagePath, args...)
+	return doBuild(os.Getenv("GOPATH"), packagePath, nil, args...)
 }
 
 /*
 BuildWithEnvironment is identical to Build but allows you to specify env vars to be set at build time.
 */
 func BuildWithEnvironment(packagePath string, env map[string]string, args ...string) (compiledPath string, err error) {
-	for key, val := range env {
-		os.Setenv(key, val)
-		defer os.Unsetenv(key)
-	}
-
-	return BuildIn(os.Getenv("GOPATH"), packagePath, args...)
+	return doBuild(os.Getenv("GOPATH"), packagePath, env, args...)
 }
 
 /*
 BuildIn is identical to Build but allows you to specify a custom $GOPATH (the first argument).
 */
 func BuildIn(gopath string, packagePath string, args ...string) (compiledPath string, err error) {
+	return doBuild(gopath, packagePath, nil, args...)
+}
+
+func doBuild(gopath, packagePath string, env map[string]string, args ...string) (compiledPath string, err error) {
 	tmpDir, err := temporaryDirectory()
 	if err != nil {
 		return "", err
@@ -63,6 +62,11 @@
 	build := exec.Command("go", cmdArgs...)
 	build.Env = append([]string{"GOPATH=" + gopath}, os.Environ()...)
 
+	for k, v := range env {
+		envVar := k + "=" + v
+		build.Env = append(build.Env, envVar)
+	}
+
 	output, err := build.CombinedOutput()
 	if err != nil {
 		return "", fmt.Errorf("Failed to build %s:\n\nError:\n%s\n\nOutput:\n%s", packagePath, err, string(output))