With the ability to now pass the <exitCode> from sys.exit() up the
call stack to the shell, FreeCADTest.py should use sys.exit() instead
of the more aggressive os._exit() method that does not allow for
post-exception cleanup.
1. Enhanced TestApp.py to return the unittest TestResult object to the calling method
2. FreeCADTest.py now checks the TestResult object. If all tests pass, FreeCADTest.py exits with a 0 however if any tests fail, then it exits with 1. FreeCADTest.py calls os._exit() with the exit code instead of sys.exit() because Base::Interpreter:SystemExitException intercepts sys.exit() calls and swallows the exit code so there is no way to propogate the non-zero code from the python test cases through the interpreter to the shell in the current call stack.