Add ThreadSanitizer build type
This might be useful for helping detect misuse of thread
operations.
It does run quite slowly, so use in an automatic per-patch Jenkins
build is probably not a good idea. In any case, it should be run
on a real workload, as well as toy examples.
As discussed in the CMake file that manages the new build type, using
TSan requires that CMake can demand that atomic operations are not
used. Accordingly, the atomic.h functionality and the CMake atomics
testing that uses it have some changes so all the ways atomic.h is
used work correctly. Documentation of how and why things work is
expanded.
A benign race condition with the (unused) return value of
mdrunner_start_threads is fixed.
Change-Id: I0da01c0bedeec2e49d4456d757c54fbe58c56ef4