*
@method findAll(<f>, [index] = 0, [loop] = false)
@returns Array
@short Returns all elements that match <f>.
@extra <f> will match a string, number, array, object, or alternately test against a function or regex. Starts at [index], and will continue once from index = 0 if [loop] is true. This method implements @array_matching.
@example

+   [{a:1,b:2},{a:1,b:3},{a:2,b:4}].findAll(function(n) {
return n['a'] == 1;
});                                        -> [{a:1,b:3},{a:1,b:4}]
['cuba','japan','canada'].findAll(/^c/)    -> 'cuba','canada'
['cuba','japan','canada'].findAll(/^c/, 2) -> 'canada'

*
function(f, index, loop) {
      var result = [];
      arrayEach(this, function(el, i, arr) {
        if(multiMatch(el, f, arr, [el, i, arr])) {
          result.push(el);
        }
      }, index, loop);
      return result;
    }