Major reworking to split the reliable console code into three layers.

The layers are:
o	A layer that manages reading from multiple connections synchronously.
o	A layer that combines the input data from the previous layer
	into a single reliable stream
o	A layer that uses the previous layer to provide a reliable console.