Fix/refactor TestRunner.

+ Check for test command and raise exception if
  not found.
+ Extract gnarly black magic methods into nicely
  named ones.
Fix test output.

+ Refactor tests and TestRunner to capture
  correct exit codes and output without
  printing to the screen.