process = function(names, skip) {

                if (!names.length) {
                    return;
                }

                YArray.each(names, function(name) {

                    // add this module to full list of things to attach
                    if (!skip) {
                        r.push(name);
                    }

                    // only attach a module once
                    if (used[name]) {
                        return;
                    }

                    var m = mods[name], req, use;

                    if (m) {
                        used[name] = true;
                        req = m.details.requires;
                        use = m.details.use;
                    } else {
                        // CSS files don't register themselves, see if it has
                        // been loaded
                        if (!G_ENV._loaded[VERSION][name]) {
                            missing.push(name);
                        } else {
                            used[name] = true; // probably css
                        }
                    }

                    // make sure requirements are attached
                    if (req && req.length) {
                        process(req);
                    }

                    // make sure we grab the submodule dependencies too
                    if (use && use.length) {
                        process(use, 1);
                    }
                });
            }
Attaches one or more modules to the YUI instance.  When this
is executed, the requirements are analyzed, and one of
several things can happen:

- All requirements are available on the page --  The modules
  are attached to the instance.  If supplied, the use callback
  is executed synchronously.

- Modules are missing, the Get utility is not available OR
  the 'bootstrap' config is false -- A warning is issued about
  the missing modules and all available modules are attached.

- Modules are missing, the Loader is not available but the Get
  utility is and boostrap is not false -- The loader is bootstrapped
  before doing the following....

- Modules are missing and the Loader is available -- The loader
  expands the dependency tree and fetches missing modules.  When
  the loader is finshed the callback supplied to use is executed
  asynchronously.

@param modules* {string} 1-n modules to bind (uses arguments array).
@param *callback {function} callback function executed when
the instance has the required functionality.  If included, it
must be the last parameter.
<code>
// loads and attaches drag and drop and its dependencies
YUI().use('dd', function(Y) &#123;&#125);
// attaches all modules that are available on the page
YUI().use('*', function(Y) &#123;&#125);
// intrinsic YUI gallery support (since 3.1.0)
YUI().use('gallery-yql', function(Y) &#123;&#125);
// intrinsic YUI 2in3 support (since 3.1.0)
YUI().use('yui2-datatable', function(Y) &#123;&#125);.
</code>

@return {YUI} the YUI instance.