making sure all pipes extend either FlatMapPipe, MapPipe, or FilterPipe so generic messaging behavior is preserved makes refactoring in the future easier. Realized a cool trick with barrier pipes (e.g. Shuffle, Order, Aggregate) around pipe.getPreviousPipe() aggregation and flatmapping.