Replace Results class with Stats class

The purpose of the results class was to act as a container for all
results, and to expose a set of methods for return metadata about the
results, e.g. the stdev, and confidence intervals. Those member methods
were removed in:

commit c45bc2a6d4f299ec3bf09cf97a2eef36255ea0d8
Author: Chris Cummins <chrisc.101@gmail.com>
Date:   Tue Nov 18 00:07:38 2014 +0000

    results.py: Use non-member results methods

Since then, there is little purpose for the Results class, as it is
essentially just a list with a pretty print method.

This patch introduces a Stats class, which acts as a container for a set
of metadata collected from a given list. It offers a formatted print
function, and access to all of the data through member variables.
Rename results.py to stats.py

The old name no longer suits the file, as it contains classes and
methods solely for statistical purposes, not processing or storing
results.
stats.py: Append "min" output with newline
Add a main method to unit test files

This allows direct execution of a test script, without relying on a test
harness.
stats.py: Set a default value for "fmt" parameter

This requires "fmt" to be a keyword argument.
stats.py: Raise exception if not passed fmt string

This patch makes Stats.format() raise an InvalidParameterException if
the "fmt" parameter is not a string.
Add unit test coverage of stats.py

This should achieve 100% coverage of the stats module, and covers the
majority of major use cases.