Enable tracing of multi-threaded applications.

Fix bug in computation of coverage percentage: Only count a line if it
was executed or if we print the >>>>>> marker.
diff --git a/Lib/trace.py b/Lib/trace.py
index 9575911..89f3162 100644
--- a/Lib/trace.py
+++ b/Lib/trace.py
@@ -50,6 +50,7 @@
 import os
 import re
 import sys
+import threading
 import token
 import tokenize
 import types
@@ -317,9 +318,9 @@
                 # #pragma: NO COVER
                 if lineno in lnotab and not PRAGMA_NOCOVER in lines[i]:
                     outfile.write(">>>>>> ")
+                    n_lines += 1
                 else:
                     outfile.write("       ")
-                n_lines += 1
             outfile.write(lines[i].expandtabs(8))
         outfile.close()
 
@@ -437,22 +438,26 @@
         dict = __main__.__dict__
         if not self.donothing:
             sys.settrace(self.globaltrace)
+            threading.settrace(self.globaltrace)
         try:
             exec cmd in dict, dict
         finally:
             if not self.donothing:
                 sys.settrace(None)
+                threading.settrace(None)
 
     def runctx(self, cmd, globals=None, locals=None):
         if globals is None: globals = {}
         if locals is None: locals = {}
         if not self.donothing:
             sys.settrace(self.globaltrace)
+            threading.settrace(self.globaltrace)
         try:
             exec cmd in globals, locals
         finally:
             if not self.donothing:
                 sys.settrace(None)
+                threading.settrace(None)
 
     def runfunc(self, func, *args, **kw):
         result = None