Add ScriptRunner class for executing scripts in subprocesses
Add output and error streams to ScriptRunner
Add ConsoleController (streaming is not working)
Add StringSignal wrapper for working with custom PyQt signals

Took a long time to work through the bugs/weirdness of PyQt regarding custom signals; they need to be a static member of a class inheriting from QObject in order for some behind-the-scenes magic to happen.

This will be used in the console log widget.
Fix ScriptRunner to properly stream subprocess output
Add LogWindow class to display subprocess output
Remove unused ConsoleController class
Add LogWindowController class which copies subprocess streams to a log window
Strip extra whitespace in appendMessage since appendPlainText adds a newline
Make LogWindowController run() synchronous for testing, add async version for production

Asynchronous call seems to only work inside an app's exec_ loop
Remove main script from bottom of LogWindowController
Remove multiple unused __init__.py
Merge pull request #13 from BlakeRaymond-AI/AddScriptRunner

Add script runner