Support index joins probing with subsets of join keys

This allows us to push index join keys through query shapes that may not allow
all keys to pass through. For example,

  SELECT *
  FROM table1
  JOIN (
    SELECT c1, COUNT(*) AS c2
    FROM table2
    GROUP BY c1
  ) t2
  ON table1.c1 = t2.c1 AND table.c2 = t2.c2;

will be able to send a index join probe key through the aggregation with column 'c1'.
Other similarly supported shapes include joins and projections.
Update IndexSnapshotBuilder to respect cpuTimerEnabled flag of parent context
Add missing @Override to LookupSource
Fix intellij warnings in RelationPlanner
Fix intellij warnings in GraphvizPrinter
Add support for UNNEST
Add helper method to compute layout
Update UnloadedIndexKeyRecordSet usage of GroupByHash
Fix issue where ScanFilterAndProject with PageSource might skip data

This can happen when processing the last page due to a broken check
in the isFinished() method. The implementation needs to check whether
there's a partial page pending processing before indicating the operator
is done.