Do not crash when using API functions while the profiler is not active
Unconditionally enable the use of scope hooks

I don't plan to support Perl < 5.14, and having the (untested) code to support
the absence of scope hooks is an useless complication.
Allow saving all source code even when profiling is disabled
Check the output buffer is valid before doing any operation on it
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.
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.
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.
By default only allow a single process ID per report

Required in order to avoid confusion when multiple processes have evals with
the same name (which will be handled separately when merging reports).
Aggressively open and flush the header of profile files

uWSGI does a double-fork+_exit to daemonize, and without this change it breaks
the parent-child relationship between processes.

A better solution would be to accumulate parent-child relationships and only
flush them when writing some sample data, but this works for now and it's
simpler.
Map physical source code lines to logical source code lines

The mapping is an identity except for #line directives.

Overlapping ranges (which have no meaningful use...) will not be stored in any
meaningful way.

There is an explict sentinel entry mapping a physical line after the last line
of the file, to simplify code dealing with line ranges.
Implement eval uniquification

After aggregation, string evals are renamed using the source code (hash) as the
key, and their exclusive/inclusive timings call sites and callees are merged.
Small refactorings
Render eval source code in the report
Take into account #line directives in the report

Files with #line directives are output multiple times (one for each logical
file name).

Line numbers in source code reflect logical line numbers (so there might be
discontinuities).
Update TODO
Fix report generation for files containing #line directives

The specific bug happened when the part of the file not mapped by #line
directives had no samples: the rendering code for the files mapped by #line
directives expected to find a rendered file under the name of the main file,
but the main file had not been rendered (because it had no samples).

The fix is to force the main file to be always rendered.
Fix merged report generation when some parts of the file have no sample data

For these cases we could force the creation of an empty entry, like we do for
the initial section of a mapped file, but for this specific case it seems
cleaner to just avoid processing the section.
Reconstruct reverse source map when loading a SourceMap object from disk