Adds a C++ implementation of opt-viewer. It works similarly to the Python implementation, with the following differences:
- Speed. The C++ implementation is faster, allowing it to be used on larger projects.
- The output directory is specified using the -o flag, before the inputs. This makes it easier to provide input filenames using xargs.
- When given a directory as an input path, this implementation crawls the directory and processes any *.opt.yaml files it finds.
- Percentages are rounded rather than truncated, and '<', '>', and '&' are replaced by HTML entities in the generated output.
- Uses LLVM to demangle C++ names, which sometimes generates output different from c++filt's.
- Only depends on LLVM - no dependencies outside the code base.
This implementation does not currently copy the style.css file to the output directory - I can add that in a follow-up if the rest of the code here looks good.
"descending" seems wrong. A normal comparison function returns true if the left value comes strictly "before" the right value. When such a function is used with something like std::sort, that gives you an ascending ordering.