Drag and drop local zip file install for ExtensionManager

Adds drag and drop support to the `ExtensionManagerDialog` to allow users to install extensions via local zip files from the native file system. The rough workflow is below:

1. Open extension manager
2. Drag and drop zip from Explorer/Finder onto extension manager dialog
3. Open `InstallExtensionDialog`
4. Validate the zip is an extension
5. Check if the zip should be installed or updated
6. Install

FYI I noticed #8165 while debugging this branch. It also appears on master.

This new workflow allows users to experiment with extensions not yet delivered via the Extension Registry and  that are also not available via a public URL.
`installFromURL()` has a bunch of logic for processing errors that we probably want to reuse -- in particular, this promise resolving doesn't necessarily mean the installation actually succeeded.  We should see if we can break out that logic so it's usable for both callers of `install()`.