Implement PackInfo for P1 and P1Bubble
Using an abstract base class (PackInfo) we can separate the communication layer from the data types that are communicated among the primitives.
Subclasses of PackInfo (e.g. P1ToP1PackInfo or P1BubbleToP1BubblePackInfo) need to be implemented in order to successfully pack and unpack the respective data.