Backend changes to check extension update needs.

Exposing ALREADY_INSTALLED state to the UI.

completely handles the case of an already installed extension the installation of which
is canceled at confirmation time.

Install extension dialog handles NEEDS_UPDATE case and also passes
along the installed extension information to the caller.

Extension Manager now displays update mark and allows undo.

Checkpointing frontend work for installing update

Supports installation of updates.
Fix the minor review comments for extension update.
Change ExtensionManager to track legacy extensions by directory name.

This makes the behavior consistent with how the Node code tracks
legacy extensions for installation and enables the update code to work.
Different messages for non-upgrades.

Display a different warning message if the version being installed
is the same or older than the currently installed version (rather than
the generic "already installed" message that we display when we don't
have a package.json).
Bug fix for same/older version installation.
Only load fully installed extensions.
add missing test file.
Minor fix so that installed zip files are deleted.
Better error handling when installing updates.

Update installation should generally not fail given the checks that
happen on the first pass of installation, but if they do we have
a reasonable display for the user and a way to get at the root
error.

Also cleaned up some of the extra braces in the extension manager
strings.
Remove ExtensionManagerView.handleNewInstall.

@njx brought this up in review. This method does seem superfluous
and removing it allows the model to notify the view that a change in
state has occurred.
Merge pull request #4105 from adobe/dangoor/update-check

Install update workflow