Proper process input/output blocking

Implemented all the features we discussed in #122.

1. Added `$PSForceSynchronizeProcessOutput` variable (also check the new documentation page - fell free to use it when you're creating new special variables).
2. When starting the process, no exceptions are thrown / catch under normal circumstances.
3. Checking the executable flags via WinAPI function for determining application subsystem. So, default behavior of PowerShell / `cmd` is now fully preserved.

Also I had to make some internal classes public for testing purposes.