text/template/parse: restore the goroutine
To avoid goroutines during init, the nextItem function was a
clever workaround. Now that init goroutines are permitted,
restore the original, simpler design.

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/6282043
diff --git a/src/pkg/text/template/parse/lex.go b/src/pkg/text/template/parse/lex.go
index 1cf4d73..62bf6d2 100644
--- a/src/pkg/text/template/parse/lex.go
+++ b/src/pkg/text/template/parse/lex.go
@@ -195,15 +195,7 @@
 
 // nextItem returns the next item from the input.
 func (l *lexer) nextItem() item {
-	for {
-		select {
-		case item := <-l.items:
-			return item
-		default:
-			l.state = l.state(l)
-		}
-	}
-	panic("not reached")
+	return <-l.items
 }
 
 // lex creates a new scanner for the input string.
@@ -219,12 +211,19 @@
 		input:      input,
 		leftDelim:  left,
 		rightDelim: right,
-		state:      lexText,
-		items:      make(chan item, 2), // Two items of buffering is sufficient for all state functions
+		items:      make(chan item),
 	}
+	go l.run()
 	return l
 }
 
+// run runs the state machine for the lexer.
+func (l *lexer) run() {
+	for l.state = lexText; l.state != nil; {
+		l.state = l.state(l)
+	}
+}
+
 // state functions
 
 const (
@@ -391,7 +390,7 @@
 }
 
 // lexChar scans a character constant. The initial quote is already
-// scanned.  Syntax checking is done by the parse.
+// scanned.  Syntax checking is done by the parser.
 func lexChar(l *lexer) stateFn {
 Loop:
 	for {