function installUpdate(path, nameHint) {
        var d = new $.Deferred();
        install(path, nameHint, true)
            .done(function (result) {
                if (result.installationStatus !== InstallationStatuses.INSTALLED) {
                    d.reject(result.errors);
                } else {
                    d.resolve(result);
                }
            })
            .fail(function (error) {
                d.reject(error);
            });
        return d.promise();
    }
Install an extension update located at path.
This assumes that the installation was previously attempted
and an installationStatus of "ALREADY_INSTALLED", "NEEDS_UPDATE", "SAME_VERSION",
or "OLDER_VERSION" was the result.

This workflow ensures that there should not generally be validation errors
because the first pass at installation the extension looked at the metadata
and installed packages.

@param {string} path to package file
@param {?string} nameHint Hint for the extension folder's name (used in favor of
         path's filename if present, and if no package metadata present).
@return {$.Promise} A promise that is resolved when the extension is successfully
     installed or rejected if there is a problem.