gocore: add dominator tree computation

Calculate the heap's dominator tree using modified L-T, reverse its
edges, and use that to calculate the per-object retained size.

One small functionality change: heapInfo.firstIdx is now set for empty
chunks, allowing binary search over Process.heapInfo.

Haven't really figured out what the public API for this should be yet;
maybe it's okay to expose the vertex names and provide an iterator
method.

This should be pretty fast, but I haven't benchmarked it yet, so there
might be some low-hanging fruit lying around.

Change-Id: I2c85c29514a0f2e60231f13f0c058dd7f12b548e
Reviewed-on: https://go-review.googlesource.com/98736
Reviewed-by: Keith Randall <khr@golang.org>
5 files changed