Store backtrace information in a memory efficient tree structure.
Instead of storing all individual traces that ever call any of the
allocation functions, we now store a tree of instruction pointers.
The tree is constructed from top-to-bottom and each node representing
an instruction pointer gets associated with a unique index. This
index is enough to reconstruct the backtrace from that point by
iterating over the parent indices, which is now done in the evaluation
program.
A nice side effect is that the data file becomes smaller for bigger
application evaluation runs, as common parts at the beginning of
every allocation trace can be implicitly shared.