Clarify what the Right Thing is
Only save eval source code when tracing is enabled
Return hex-encoded process id from the reader

Also, fix code assuming unsigned int is exacly 32 bits.
Fix crappy fragile test
Fix test that was depending on a BEGIN block in main being always sampled
Add flags set to true when metadata/sections changed in the current frame
Add option to set the max file size at import time
Add a method to merge a report into another
Record parent-child information while parsing profile files
Add class to incrementally aggregate profiles into multiple reports

Still missing a way to collect all partial reports in a single file for load
speed, but the functionality is mostly there.
Add an explicit close tag to mark the end of a sequence of split files

Will be used by the incremental report aggregator to discard intermediate
state for a "done" subprocess.
Move genealogy data to a separate __state__ subdirectory
Load genealogy data in merged_report()
One-line fix to update the processed ordinal after adding a profile file to the report

...plus all the test jiggery required for aggregation tests to pass.
Use a per-process-id state file for the report aggregator

Allows processing profiles for different processes in parallel without worrying
about locking.
Collect and aggregate source code and genealogy data

During trace processing collects all eval STRING source code (and the process
id/ordinal in which it was evaled), and adds an API to find the source code for
a sample given a process id/ordinal/eval name triple.

Multiple eval()s using the same #line directive overwrite each other.