refactored the code
now allowing a completion callback to be passed to the run method
changed parser not to fail on categorized sources and sinks, but to instead ignore this additional data
made some fields final
changed test runner to use threads with a 15 minute timeout and write results to a separate file per app