Remove cumulative-times-in-order checks

The SI-format readers should not prevent the data from being loaded and
shown in the results table, and should not prevent graphs of unaffected
courses from being shown.

It may not be such a good idea to graph data with negative and/or zero
splits, but that's another matter.
Avoid division by zero in percent-behind chart

More specifically, when generating the percentage-behind chart, don't
attempt to divide by any number that isn't positive.
Allow for 'dubious' splits

A competitor now has 'original' as well as 'final' cumulative and split
times.  The former is read from the file and shown in the results table,
whereas the latter is what is plotted.  The intention is that some of
the splits can be marked as 'dubious' and omitted from the chart, with
dotted lines connecting the points on either side.  A split is marked as
dubious by replacing it with NaN.

This commit does not include the ability to detect any dubious splits,
nor to adjust the chart to draw dotted lines around dubious splits.
Distinguish dubious times on the results table

Dubious times now appear faded in grey and in italics.
Add initial data-repair framework

No repairs are done yet, but the framework is in place to add them.
Set chart X range to min/max cumulative times

If the source data is dirty, cumulative times may not always be strictly
ascending.
Fix drawing of chart background rectangles

Errors were being generated for rectangles with negative width.  To get
around this, we sort the reference cumulative times.  We also discard
any duplicate values.

The calculation of the rectangles' widths needs to be adjusted as the
xScale is no longer a linear transformation.
Use sorted cumulative times for the control line

This allows the user to select the nearest control to the mouse when the
reference cumulative times are not in order.
Regard zero split times as dubious

If two or more consecutive cumulative times are equal, then all but the
first are considered dubious and are removed.
Don't wrap cell contents in results table
Draw dashed lines around dubious times

Dashed lines connect the last time before one or more dubious splits and
the first time after them.
Reorder drawing of chart lines

Dashed lines around a competitor's dubious times are now drawn
immediately after the competitor's line.  This ensures that the dashed
lines have the same Z-index as the 'main' line.
Cope with controls with no sensible splits

Event 6570 has a course where all splits to a control are zero, and
hence dubious.  AgeClassSet.getFastestTimes() has been adjusted to fill
in the gaps with vaguely sensible values.
Make dashed lines around dubious splits shorter
Set time losses to NaN if null in fastest splits

If a control on a course has all splits dubious, it won't have a fastest
time, so time losses should still be calculated.  All we need to do here
is to remove the check for it.
Remove warning when nobody punches a control

The code in the previous commit for handling controls that everybody on
a course has a dubious split for now handles this situation.  So there's
no need to check for this situation.

The ability to disable the chart and show a warning over it, and disable
the competitor listbox, has also gone.
Fill in blank reference cumulative times

When a competitor with a dubious time is the source of the comparison,
the reference cumulative times need to have the dubious times replaced.
We use linear interpolation to fill in the blanks.
Omit dubious splits from fastest-splits popups
Improve fastest-splits popup placeholder text

'No competitors completed the course' isn't valid if the entire class
has registered dubious splits on one control.  It's now just 'No
competitors'.
Remove absurdly high/low cumulative times

If taking out one time leaves the remaining list of cumulative times in
ascending order, or at least the next inversion is beyond the current
pair of cumulative times, then that one time is removed.  This however
does not include the finish.