dashboard: always run bench binary with timeout
When the tree is particularly broken,
even the first invocation of bench binary that queries list
of benchmarks can hang.
Fixes golang/go#8844.

LGTM=bradfitz
R=adg, bradfitz
CC=golang-codereviews
https://golang.org/cl/162160043
diff --git a/builder/bench.go b/builder/bench.go
index fa3849d..fb99aac 100644
--- a/builder/bench.go
+++ b/builder/bench.go
@@ -115,13 +115,14 @@
 // based on the list of available benchmarks, already executed benchmarks
 // and -benchcpu list.
 func chooseBenchmark(benchBin string, doneBenchs []string) (bench string, procs, affinity int, last bool) {
-	out, err := exec.Command(benchBin).CombinedOutput()
+	var out bytes.Buffer
+	err := run(exec.Command(benchBin), allOutput(&out))
 	if err != nil {
 		log.Printf("Failed to query benchmark list: %v\n%s", err, out)
 		last = true
 		return
 	}
-	outStr := string(out)
+	outStr := out.String()
 	nlIdx := strings.Index(outStr, "\n")
 	if nlIdx < 0 {
 		log.Printf("Failed to parse benchmark list (no new line): %s", outStr)