Use ExecutionException in signatures instead of more specific PyExternalProcessException
Cause is used only in the message passed to the constructor of PyExternalProcessException
Added getFixes() to PyExternalProcessException instead of withHandler()

These exceptions and fixes are now used for displaying notifications in
the notification area of the package management panel.
Renamed PyExternalProcessException to PyExecutionException
Removed the action link from the description of the problem

Links are added by traversing the list of available fixes.
Throw PyExecutionException unchanged, since it may carry useful details
PyPackageManager.hasManagement() throws exceptions with PyExecutionFix for launching Vagrant
Restored "Launch Vagrant" fix for packages list panel
Restored "Install packaging tools" fix when there is no 'setuptools' installed
Removed unused constants
Don't substitute ExecutionExeption with PyExecutionException
Renamed PyExecutionException.getReturnCode() to getExitCode() for consistency with ProcessOutput
Pass stdout and stderr to PyExecutionException
New package operation failure dialog
Show simplified installation command and proposed solution on installation failure
Fixed CME in PyPackageManagerImpl.findPackage() (EA-61108)
PackageManagementService uses ErrorDescription instead of String for error reporting
Use ErrorDescription in PackagesNotificationPanel for error reporting
Moved generation of ErrorDescription from PyPackageManagementUI to PyPackageManagementService
Cleanup (formatting; warnings)