code: func New(completer Completer, timeout time.Duration) *Future {
  	f := &Future{}
  	f.wg.Add(1)
  	var wg sync.WaitGroup
  	wg.Add(1)
  	go listenForResult(f, completer, timeout, &wg)
  	wg.Wait()
  	return f
  }
docs: // New is the constructor to generate a new future.  Pass the completed
  // item to the toComplete channel and any listeners will get
  // notified.  If timeout is hit before toComplete is called,
  // any listeners will get passed an error.