Error handling and reworked pipelines

The major changes of these commits are the following:
1. Introduced correct error handling/processing. This means that the ErrorStream in a pipeline is now used to catch errors properly and that this stream is further processed in order to print the errors.
2. The UI I/O is now completely covered by the Out-Default and FullHost commands.
3. Pipelines and pipeline processing was basically reworked. Internally used streams are now redirected instead of copied and the lifecycle of commands has been adjusted to the MS specification of Powershell.
4. Parsed pipelines are now executed correctly. Before, VisitPipeline() implemented some sort of quasi-pipeline and all its sub-commands were executed as single pipelines. Now the parsed pipeline is actually transformed into a real pipeline and processed as such.

However, what does not yet work as specified is the ProcessRecord-on-new-input mechanism. In PS, a record is processed as soon as it's available to the next command. This implementation, however, waits until a command has finished and processes all records at once. While this is generally not so critically, it becomes important as soon as one command breaks the pipeline (see ignored tests).
Nevertheless, most changes were done having this feature implementation in mind, so this implementation shouldn't become to hard.