Switch to an Operations paradigm for output

Allows considerably more flexible output designs, allowing for
non-traditional outputs and the ability to easily manipulate and extend
existing outputs without needing to know the type of output beforehand.
Update all relevant code to use new OutputBase

Allows existing code to take advantage of the new output engine. Also
poses the possibility of avoiding the need for a separate output thread
altogether given the availability of async output methods.
Execute commands using async

Avoids the need to spawn a new thread for each processed command,
simplifying matters greatly and probably helping performance marginally.
Didn't notice any deadlocks during testing (even with long commands), UI
remained responsive etc.
Merge remote-tracking branch 'origin/development' into feature/output_operations
Add serialization methods and info for all OutputBase children

See comments on #49 for motivation
Merge pull request #58 from Mpstark/feature/output_operations

Output Operations