An optimized Callstack struct that represents a single stack trace.
No symbols are explicitly held here - the major savings is that
we use an external dictionary to store symbols, because the same IPs
are used over and over in many stack traces.
DecoratedCallstack enables detailed stack trace printouts.
Each callstack consists of multiple frames, parent frame calls the child frame so on.
Each frame may expand to include multiple symbols, especially due to inlining.