code: function(doit, checkit, seed) {
        var ret = [];
        var result = doit(seed);
  
        while (checkit(result)) {
          ret.push(result);
          result = doit(result);
        }
  
        return ret;
      }
docs: Call a function recursively f(f(f(args))) until a second given function goes falsey.  Expects a seed value to start.