code: function ArrayStream(arr, op) {
    op = op || {};
    this.i = 0;
  
    this.readable = true;
    this.paused   = !!op.pause;
  
    this.arr = arr || [];
    this.isArray  = Array.isArray(arr); 
    this.keys     = Object.keys(arr);
    this.length   = this.keys.length;
    this._options = op;
  
    if (!this.paused) nextTick(emit.bind(this));
  }
docs: @constructor
  
  @param {Array} or {Object} arr
  @param {Object} op
  {boolean} tolerant  if true, continue iteration even if errors occurred
  
  @event {data} function(value, key)
  Emitted when received an element.
  
  @event {end} function()
  Emitted when reached end
  
  @event {error} function(e)
  Emitted when an error occurred