MessageDirector: Improve in-method and private documentation for program flow clarity.
DatagramIterator: Document methods in DatagramIterator.h
MessageDirector: Fix logging typo
MDParticipantInterface: List assumptions made about implementation.
MessageDirector: Use map<channel, list<participant>> for single channels.
TODO: Create BST type structure to handle ranges, and interface with it as necessary.
BUG: Tests stall indefinitely at around

        # Send messages on a few channels on c2, see which ones c1 gets.
        def check_channels(channels):
            for channel, should_receive in channels:
                dg = Datagram.create([channel], 123456789, 5858)
                dg.add_uint16(channel) # For some semblance of uniqueness
                self.c2.send(dg)
                if should_receive:
                    self.assertTrue(self.c1.expect(dg))
                    self.assertTrue(self.c1.expect_none()) # No repeats!
                else:
                    self.assertTrue(self.c1.expect_none())
                # And, of course, l1 receives all of these:
                self.assertTrue(self.l1.expect(dg))
        check_channels([
            (500, False),
            (999, False),
            (1000, True),
            (1001, True),
            (1299, True),
            (1300, True),
            (1500, True),
            (1699, True),
            (1700, True),
            (1701, True),
            (1900, True),
            (1999, True),
            (2000, False),
            (2050, False),
            (2500, False)])
MessageDirector: Implement ranges with interval_map.
Now handles CONTROL_REMOVE_RANGE. Still stalls on test suite.