Suite, Fixture, and Case execution perform all output through the given Listener, simplifying result accumulation.
ConsoleRunner minimizes the amount of code needed in a MarshalByRefObjecct.  ConsoleRunner and TdNetRunner (the two entry points) both defer to a common Runner, minimizing duplication of logic and allowing TdNetRunner to focus completely on integrating with TestDriven.net.