Add a script which shows the knocked-out teams.

This was requested during the competition, and was useful so we could
say goodbye to the teams.

Change-Id: I433d1fd80f622e023f38a2d815d24f3a9988b17d
Extract the scorer to a dependency injection.

The details of the scorer are going to change each year. Even if it
is always in the same place for usage, we really want to be able
to test things without being dependent on the scorer. By extracting
it to an injected dependency we make changing it very much easier.

Change-Id: I667af5494cb3568a8df8a9b51889f45af6e409b8
Rename match_league_points to ranked_points.

This achieves consistency between the LeagueScores and the
KnockoutScores, which means we can merge them.

Change-Id: I65a845c87e9bf4f52322a3e5d9b4184fd9136289
Improve documentation and comments.

This now explains what we're expecting from the 'scorer' value, and
clarifies some of the comments about the fields in the LeagueScores
class.

Change-Id: I06c19803812f211b5ff67607d87376f2955897c2
Remove redundant field.

Change-Id: I0f9f452eb9dca8393a73300d0dd2a43ecce735de
Make the custom exceptions more useful.

Wrap them around the data they relate to and provide a nicer
error message for the user. This makes them better for both
humans and computers which encounter them in the wild.

Change-Id: If93ae216c41d076e5715f4807f08d8f943b45a7a
Extract common logic into a BaseScores class.

Most of the work done in the LeagueScores and KnocoutScores classes
is the same. This moves the majority of that into a base class and
then has the two classes extend that.

Change-Id: I556739ba83b121bd0be7ea5fcd66aab8d377d1d7
Change the unit tests to use a FakeScorer.

This doesn't actually do any scoring -- it just rearranges the input
data to provide the right shaped output. This allows the tests to
work even as we change the underlying scoring implementation.

Change-Id: Ibf83a0c4b0985a23f04b2cfcd323b1cdd868f96b