Use reporter interface for generating exit code

The reporter types had two different responsibilities
 - Perform the intended reporting (write to screen or file)
 - Report if the test run was a success for the runner's exit code

By creating a specific reporter for the sole purpose of determining if the
test is a success or failure, each reporter now has only one
responsibility.
Removed Success property from non-generic reporter
Changed ReporterWrapper to interface type

This could make it easier to create new reporters?
Changed changed exit code reporter into a class

This simplifies the code
Renamed ReporterWrapper to IReporter
Moved IReporter to TestReport.fs

It was temporarily placed in Runner.fs to allow refactoring of how the
runner would report to the reporter without affecting other code to begin
with.
Moved TreeReporter functions to higher scope

This allows us to use them from a new reporter type, natively implementing
IReporter
Refactored reporter test double
Removed unused functions
Moved ExitCodeReporter and wrapReporters to core

We will be needing them for the refactored runSingleAssembly
Removed old version of tree reporter