AHLRAP-1430 Buffering problem in PyDev

This substantial change rewrites a considerable amount of code to
provide an asynchronous stream for the ScriptConsoleDocumentListener to
listen to as events rather than some ad hoc event loop distributed
between several files.

This is done by providing a few new interfaces and implementations for
asynchronous stream reading and monitoring. To wit: StreamReader<..>
will listen to the Streams from stdout and stderr and add them to a
BlockingQueue. IStreamMonitor (concretely ThreadedStreamMonitor) will
listen to the same BlockingQueue and notify listeners of the new stream
inputs. Finally, the ScriptConsoleDocumentListener is not an
IStreamListener and implements the onStream message and this will add
the text to the console after some judicious prompt manipulation.

I've demonstrated this code to James, Den, and Ed and shown how it
works.

TODO: cleanup old code which I left in as stubs to remind me where the
old code was pulling stdout and stderr in case this gave me some clues
on how to tweak some corner cases. I didn't appear to need them so I can
remove some of that code and perhaps rejig the aforementioned
distributed event loop to be much cleaner.

TODO: Rewrite the addToConsoleView function so it can insert
asynchronous text above the prompt rather than erasing the prompt and
replacing it.

Change-Id: I49063e5e502ab92a87fe9edf928261b583a9e12b

AHLRAP-999 Performance there really is no need to spawn a new OS thread
for every line sent to the console.

Change-Id: Ied50122a7600b359f7bef5ee4dc7f32669810457

Collect console output for display if hello fails

Only start the stream monitor once we have a listener - means that we
don't lose any output and simplifies the error case

Change-Id: I945d6df0456591423021f8c49c08a6e5b248a10f