code: function genIterator (obj) {
      if (obj) {
          var gen = obj[_.Promise.Symbol.iterator];
          if (_.isFunction(gen)) {
              return gen.call(obj);
          }
  
          if (obj instanceof Array) {
              return new ArrIter(obj);
          }
  
          if (_.isFunction(obj.next)) {
              return obj;
          }
      }
      throw new TypeError('invalid_argument');
  }
docs: Generate a iterator
  @param  {Any} obj
  @return {Function}