add MultiThreadTestRunner

TODO:  MultiThreadTestRunner does not own the test cases
in it's queue, so there is a chance that these test cases
have been freed before run.
We need to acquire the ownership of the test cases.