V8 CPU Profiler: source level support

The idea behind of this new solution is to use the existing "relocation info" instead of consumption the CodeLinePosition events emitted by the V8 compilers.
During generation code and relocation info are generated simultaneously. When code generation is done you each code object has associated "relocation info". Relocation information lets V8 to mark interesting places in the generated code: the pointers that might need to be relocated (after garbage collection), correspondences between the machine program counter and source locations for stack walking.
This patch:
1. Add more source positions info in reloc info to make it suitable for source level mapping. The amount of data should not be increased dramatically because (1) V8 already marks interesting places in the generated code and (2) V8 does not write redundant information (it writes a pair (pc_offset, pos) only if pos is changed and skips other)
2. When a sample happens, CPU profiler finds a code object by pc, then use its reloc info to match the sample to a source line. If a source line is found that hit counter is increased by one for this line 
3. Add a new public V8 API to get the hit source lines by CDT CPU profiler. It's expected a minor patch in Blink to pack the source level info in JSON.
4. Add a test that checks how the samples are distributed through source lines. It tests two cases: (1) relocation info created during code generation and (2) relocation info associated with precompiled function's version.
Haitao, thanks for review.
Let me provide more info. Using existing reloc info associated with a code object has an advantage in comparison with the previous approach. Vtune consumes the events and puts them in a trace file as they come, no any event processing while an app is running. So this approach is excellent if you consume and write the events in a trace file to be processed at post-collection phase.  If we use the same approach for CPU profiler (CDT) that we have to do extra work while app is running - maintain a map with source level info using CodeAdded, CodeMoved and CodeDeleted events. For example, you get the result for the first profiling run, then you profile the app again. If we use previous approach we have to use this map to get source level info. In addition to it, we need to maintain the map all the time between the profiling runs to catch when the code location on the heap is changed (a key is code's starting address). Considering it, using "reloc info" associated with a code looks easier because you can always access it using existing "infra" and without any extra work. That was a reason I choose another approach. 
Answering on your question, my testing showed that recorded info is not enough for precise mapping to source line, although the code is well covered with source positions. At the same time, I did not see that newly added lines increased the existing info significantly. V8 filters out the source positions and writes it when position's value is changed from the previous one. I agree that we add more info in reloc info to existing info for opt code.
What do you think?