FailureException and ShouldBeUnreachableException produce context-aware error messages despite having zero arguments passed to them, simplifying assertions of expected exceptions.
Fix Runner so that it calls the Listener's AssemblyStarted(...) and AssemblyCompleted(...) once per Assembly instead of once per Convention.
Consistently use FailureException.