Make the knockout scheduler injectable.

Smallpeice isn't going to use this scheduler, but will otherwise
use similar stuff.

Change-Id: I68c99f5f31bb78aabc038c103d8fd8a40cb32a46
Separate ranking a knockout from getting winners

This makes it possible to query for all the teams, removing the
expectation that we only want the top two. Leave the existing
signature behving the same for compatibility.

Change-Id: Ia92ebd8b7cf985f5e1493c3d341de9eee54d8668
Add a static knockout scheduler

This just reads a config from the schedule file and builds up a
somewhat static schedule from that. There is support for referencing
seeds and positions in other knockout matches, but timings and zone
allocation are all handled explicitly in that config.

Change-Id: I8253ffbfa030fbc72d99f9b949282ad0de1a6f55
Fix winner selection in static knockouts

I'd not noticed that the ranking returned by get_ranking is ordered
in reverse compared to what would usually be expected (ie the winner
is at the end of the list). Reverse the list before looking up the
team at a given position to give the right behaviour. Add tests for
various stages through the knockouts which showed this bug.

Change-Id: Ic63dbed07a4462592d8ff8e65d0f8735e1ffe0d3
Avoid proliferation of ???.

Switch to using the named constant instead.

Change-Id: Icc203eb15faa365c868df54ddef44c125266b45f
Add a test for the state before static knockouts start

Add in a league match to the schedule of this test so that it
thinks the league is still underway, and thus assert that all the
teams are then unknowable.

Change-Id: I93a51d837d4865800f7bfbe12fe22b3913ab61cb