code: function(whereProperties, whereValue, whereEquals, out)
    {
      var where = createWhere( whereProperties, whereValue, whereEquals );
      var target = out || this.cloneEmpty();
  
      for (var i = 0; i < this.length; i++)
      {
        var a = this[ i ];
  
        if ( where( a ) )
        {
          target.push( a );
        }
      }
  
      return target;
    }
docs: Creates a copy of this collection with elements that match the supplied
  parameters. The parameters are passed to the {@link Rekord.createWhere}
  to generate a function which tests each element of this collection for
  inclusion in the newly created collection.
  
  ```javascript
  var isEven = function() { return x % 2 == 0; };
  var c = Rekord.collect(1, 2, 3, 4, 5);
  var w = c.where(isEven); // [2, 4]
  ```
  
  @method
  @memberof Rekord.Collection#
  @param {whereInput} [whereProperties] -
  See {@link Rekord.createWhere}
  @param {Any} [whereValue] -
  See {@link Rekord.createWhere}
  @param {equalityCallback} [whereEquals] -
  See {@link Rekord.createWhere}
  @param {Array} [out=this.cloneEmpty()] -
  The array to place the elements that match.
  @return {Rekord.Collection} -
  The copy of this collection ran through a filtering function.
  @see Rekord.createWhere