The BufferedCommunicator could cache neighbor dependencies instead of arranging them before every communication