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