* Remove ErrorReporter.Error, replace with AutomationException with Error Code.
* Move ErrorCodes to AutomationException.
* Don't return exit codes. Solely rely on exceptions to propagate exit codes.
* Remove MainProc delegate
* Remove setting of Environment.ExitCode as it is ignored when main returns an int.
* ShutdownLogging is nothrow, as all exceptions would be ignored anyway.
* Wrap all shutdown steps so further ones get a chance to run.
* Move HostPlatform.Initialize into the global try/catch block
#codereview:ben.marsh
[CL 2605826 by Wes Hunt in Main branch]
* Before, if you, say, remove "EpicGamesLauncher" it will remove the default launcher nodes, but will still add the NonUnityTool nodes (GUBP.Automation.cs Line 5617 and 5641).
* This would cause the GUBP verification checks to fail because the NonUnity nodes for the launcher depend on the unity nodes. The idea is to Exclude ALL of that program's nodes from the graph, otherwise there's no way to exclude NonUnity nodes at all!
* Now we check the branch hacker before removing both the Tools node and the NonUnityTool node.
[CL 2597034 by Wes Hunt in Main branch]