code: func (hs *hSet) add(ev string, h Handler) Remover {
  	hs.Lock()
  	defer hs.Unlock()
  	ev = strings.ToLower(ev)
  	l, ok := hs.set[ev]
  	if !ok {
  		l = &hList{}
  	}
  	hn := &hNode{
  		set:     hs,
  		event:   ev,
  		handler: h,
  	}
  	if !ok {
  		l.start = hn
  	} else {
  		hn.prev = l.end
  		l.end.next = hn
  	}
  	l.end = hn
  	hs.set[ev] = l
  	return hn
  }
docs: // When a new Handler is added for an event, it is wrapped in a hNode and
  // returned as a Remover so the caller can remove it at a later time.