Use a virtual terminal for inferior output capture.

Debugged processes in general expect their standard streams to be
connected to a terminal, or might alter their behavior (e.g.: output
buffering, output formatting, etc).

Pipes do not present a terminal interface, so we have to create a
virtual terminal pair in order to keep the interface.
include missing header

Types.h uses free() which is declared in stdlib.h.  Fix missing include.
NFC.
avoid COM interfaces

We use the windows itanium target which doesnt provide a builtin
definition for IUknown like MSVC.  Avoid the COM interfaces when
building DS2.
Implement Q{Save,Restore}RegisterState.