even more aggressive under-approximation than AdaptiveSerializer. This one
only looks at the top frame of each thread, and only serializes objects
referenced from there. It ignores static fields and deeper heap objects that
are not directly referenced.
While this seems too aggressive, it actually finds a lot of concurrency
defects in real world applications. This is esp. true if there are
a lot of field access CGs, i.e. shared objects. In this case, the
TopFrameSerializer can behave an order of magnitude better than CFSerializer