Parallel Program Analysis and Restructuring by Detection of Point-To-Point Interaction Patterns and Their Transformation into Collective Communication Constructs