introduce P2P_Direction_Strategy interface

The idea is that it's better to have classes that implement a
small interface, instead of classes that overwrite seemingly random
methods of a big parent class.