Perfected how handling an exit command is determined.
Also removed a command to execute an "exit" command on the client
because we call "this.Close()". On FormClosing(object,
FormClosingEventArgs), we send an "exit" command anyways. Two of them
should not be sent to close the client's shell...
Added an "IsError" property to the ShellCommandResponse to denote if the
response should be handled a certain way (if it is a response to a
ShellCommand error, then print it differently).
Also correctly queues up two different threads on shell initialization.
These ManualResetEvents now will signal the Shell's redirected output to
handle either the output, or the error output. Not at the same time
(will cause deadlocking).
We now append the text instead of concatenating. Not sure how much more
efficient this is, but it is certainly more readable.