Extract private method from ConventionRunner.Run, to run a single discovered test class.
ExecuteCases's constructor receives the case behavior chain instead of the whole ExecutionPlan, because that is the only part of the plan it needs.
Separate CaseDiscoverer into separate ClassDiscoverer and CaseDiscoverer classes.
Move ClassDiscoverer to its own file.
ConventionRunner becomes ClassRunner, which Runner uses to run each discovered test class.
Class behaviors CreateInstancePerClass/CreateInstancePerCase own test class construction and disposal.  ExecutionPlan's sole responsibility is to construct the behavior graph.