+str #16038 Create Source/Flow/Sink from partial flow graphs

Fixes #16038
wow, I didn’t expect this:
~~~
scala> object A { val (x, y) = (1, 2) }
defined object A

scala> :javap -c -p A
Compiled from "<console>"
public class A$ {
  public static final A$ MODULE$;

  private final scala.Tuple2 x$1;

  private final int x;

  private final int y;

  public static {};
    Code:
       0: new           #2                  // class A$
       3: invokespecial #12                 // Method "<init>":()V
       6: return        

  public int x();
    Code:
       0: aload_0       
       1: getfield      #20                 // Field x:I
       4: ireturn       

  public int y();
    Code:
       0: aload_0       
       1: getfield      #23                 // Field y:I
       4: ireturn       

  public A$();
    Code:
       0: aload_0       
       1: invokespecial #24                 // Method java/lang/Object."<init>":()V
       4: aload_0       
       5: putstatic     #26                 // Field MODULE$:LA$;
       8: aload_0       
       9: new           #28                 // class scala/Tuple2$mcII$sp
      12: dup           
      13: iconst_1      
      14: iconst_2      
      15: invokespecial #31                 // Method scala/Tuple2$mcII$sp."<init>":(II)V
      18: astore_1      
      19: aload_1       
      20: ifnull        72
      23: aload_1       
      24: invokevirtual #36                 // Method scala/Tuple2._1$mcI$sp:()I
      27: istore_2      
      28: aload_1       
      29: invokevirtual #39                 // Method scala/Tuple2._2$mcI$sp:()I
      32: istore_3      
      33: new           #28                 // class scala/Tuple2$mcII$sp
      36: dup           
      37: iload_2       
      38: iload_3       
      39: invokespecial #31                 // Method scala/Tuple2$mcII$sp."<init>":(II)V
      42: astore        4
      44: aload         4
      46: putfield      #41                 // Field x$1:Lscala/Tuple2;
      49: aload_0       
      50: aload_0       
      51: getfield      #41                 // Field x$1:Lscala/Tuple2;
      54: invokevirtual #36                 // Method scala/Tuple2._1$mcI$sp:()I
      57: putfield      #20                 // Field x:I
      60: aload_0       
      61: aload_0       
      62: getfield      #41                 // Field x$1:Lscala/Tuple2;
      65: invokevirtual #39                 // Method scala/Tuple2._2$mcI$sp:()I
      68: putfield      #23                 // Field y:I
      71: return        
      72: new           #43                 // class scala/MatchError
      75: dup           
      76: aload_1       
      77: invokespecial #46                 // Method scala/MatchError."<init>":(Ljava/lang/Object;)V
      80: athrow        
}
~~~
So, not only does it create a Tuple2 for the RHS, it also creates one for the LHS and then extracts the values from it.