function bifurcateValuesBy( x, predicate, thisArg ) {
	var get;
	var len;
	var out;
	var v;
	var i;

	// Get the number of elements to group:
	len = x.length;
	if ( len === 0 ) {
		return [];
	}
	// Resolve an accessor for retrieving array elements:
	get = resolveGetter( x );

	// Loop over the elements and assign each to a group...
	out = [ [], [] ];
	for ( i = 0; i < len; i++ ) {
		v = get( x, i );
		if ( predicate.call( thisArg, v, i, x ) ) {
			out[ 0 ].push( v );
		} else {
			out[ 1 ].push( v );
		}
	}
	return out;
}
Splits element values into two groups according to a predicate function.

@param {Collection} x - input array
@param {Function} predicate - predicate function specifying which group an element in the input collection belongs to
@param {*} [thisArg] - predicate function execution context
@returns {Object} group results

@example
function predicate( v ) {
    return v[ 0 ] === 'b';
}

var x = [ 'beep', 'boop', 'foo', 'bar' ];

var out = bifurcateValuesBy( x, predicate );
// returns [ [ 'beep', 'boop', 'bar' ], [ 'foo' ] ]