Fixed bug in  NonInteractiveProcess: Don't dispose Job Object until process exits

Disposing the Job Object before the process exits causes the process to terminate immediately.
Added plugins as dependencies to CLI and GUI projects to ensure they are always recompiled
Removed unused JobObjectController.cs and
Minor/ignore - Updated XMLDoc comments in IJobObjectManager and JobObjectManager
Cleaned up JobObjects/WinAPI.cs: Removed unused methods, reorganized API calls, and reformatted lines
Mono compat: Check OS type in Windows7TaskbarItem.IsPlatformSupported
Minor/ignore - Moved [UsedImplicitly] attribute from class declaration to constructor in JobObject.cs
Removed unnecessary call to CreateJobObject() in JobObjectManager.CreateProcessInSeparateJob()
Minor/ignore - Added important notes to XMLDoc comment for CloseHandle() in JobObjects/WinAPI.cs
Removed unused code and associated TODO comment
Better IDisposable implementation in JobObject.cs
Minor/ignore - Removed [UsedImplicitly] attribute from JobObject constructor
Added logging to JobObjectManager
Minor/ignore - Removed incorrect <exception/> XMLDoc comment from PluginLoader constructor
Minor/ignore - Added [UsedImplicitly] attribute to PluginLoader constructor
Refactored Plugin classes: split PluginService into PluginService, DevPluginService, and PluginRepository (along with matching interfaces)
Minor/ignore - Removed unused `using`
Minor/ignore - Removed unused event handler from IPluginHost / PluginRepository
Minor/ignore - Formatted XMLDoc comments
Minor/ignore - Added <exception/> XMLDoc comment to ProgressSample.EstimatedTimeRemaining