function setdiff( A, B ) {
	var out;
	var N;
	var M;
	var v;
	var i;
	var j;

	N = A.length;
	M = B.length;

	out = [];
	for ( i = 0; i < M; i++ ) {
		v = B[ i ];

		// Note: some performance gains could be attained, if we could assume that both sets are ordered. In which case, we need not begin our search from the beginning of `A`, but from the index following the last match.
		for ( j = 0; j < N; j++ ) {
			if ( v === A[ j ] && !hasOwnProp( aliases, v ) ) {
				debug( 'Excluding %s.', v );
				break;
			}
		}
		// Did we exhaust all elements? If so, we have found an output element...
		if ( j === N ) {
			out.push( v );
		}
	}
	return out;
}
Computes the relative complement of set `A` in set `B` (i.e., the set of elements in `B` which are not in `A`).

## Notes

-   We assume that `A` is a list of namespaces and `B` is a list of packages. We exclude all namespaces from the output array, _except_ those that have aliases in the global alias namespace.

@private
@param {Array} A - first set
@param {Array} B - second set
@returns {Array} relative complement

@example
var A = [
    'foo',
    'bar',
    'beep'
];

var B = [
    'baz',
    'bar',
    'boop'
];

var out = setdiff( A, B );
// returns [ 'baz', 'boop' ]