function setAliases( out, context, skip ) {
	var alias;
	var key;
	var N;
	var o;
	var i;
	var j;
	var k;

	N = skip.length;

	// Extend the context object, keeping in mind that an alias may be nested (e.g., `a.b.c`), and, if so, we need to recursively generate nested objects...
	for ( i = 0; i < ALIASES.length; i++ ) {
		alias = ALIASES[ i ];
		if ( contains( N, skip, 1, 0, alias ) ) {
			continue;
		}
		o = context;
		key = alias.split( '.' );
		for ( j = 0; j < key.length-1; j++ ) {
			k = key[ j ];
			if ( !hasOwnProp( o, k ) ) {
				setReadOnly( o, k, {} );
			}
			o = o[ k ];
		}
		k = key[ j ];
		if ( hasOwnProp( o, k ) ) {
			debug( 'Skipping alias as global context property `'+alias+'` is already assigned.' );
		} else {
			setMemoizedReadOnly( o, k, createAccessor( out, context.require, alias ) ); // eslint-disable-line max-len
		}
	}
	return context;
}
Sets aliases on a sandboxed `context` object.

@private
@param {Array} out - strided output array for storing resolved module exports
@param {Object} context - context object
@param {Array} skip - list of aliases to skip
@returns {Object} context object