code: function eClosure(eMoves,eMoveMap) {
    var closureMap={};
    eMoves.forEach(function (state) { // FK forEach pass extra args
      closure(state);
    });
    return closureMap;
  
    function closure(state,_chain) {
      if (closureMap.hasOwnProperty(state)) return closureMap[state];
      if (!eMoveMap.hasOwnProperty(state)) return false;
      _chain=_chain||[state];
      var dest=eMoveMap[state],
          queue=dest.to.slice(),
          toStates=[state],s,clos;
      while (queue.length) {
        s=queue.shift();
        if (~_chain.indexOf(s)) {
          throw new Error("Recursive ε-move:"+_chain.join(">")+">"+s+"!");
        }
        clos=closure(s,_chain);
        if (clos)  queue=clos.slice(1).concat(queue);
        toStates.push(s);
      }
      return closureMap[state]=toStates;
    }
  }
docs: ε-closure
  return closureMap {fromState:[toState]}
  eMoveMap = {fromState:{to:[State]}}