Fixing assertion failure happening on some of the unix machines (dotnet/corefx#24017)
* Refactoring Process.Start to simplify logic
This also fixes the following existing issues:
- allows user to successfully open folder (23969) with UseShellExecute
- throws when opening a missing file with UseShellExecute
this makes these behaviours consistent across win/unix machines
Updated existing tests to comply with these new fixes
* Simplifying condition checks in Process.Start
* Applying code review comments
Commit migrated from https://github.com/dotnet/corefx/commit/
a16368dc4694c0334a8794107a9e868020f0bed5