adjust CommunicationStream hierarchy (for change)

interface for all read/write methods, abstract class to allow easy
creation of new communication methods (say... bitstrings?)