heterodyne: Combine all subscans into the flatfield determination.

Since the subscans comprise a single observation, they should be
analysed together.  This leads to a more accurate receptor-to-receptor
ratios, especially where short final subscans can lead to large
flatfield errors for the spectra therein.
heterodyne: Realign indentation after combining all subscans.
heterodyne: Apply smoothing to the spectra before ratioing single-receptor cubes.

Apply smoothing in the velocity direction to mitigate against noisy
baseline biasing the ratios to a random 0, instead of the expected
ratios in the vicinity of 1.
heterodyne: Remove a filename diagnostic.
heterodyne: Flag noisy or disagreeing voxels from the ratio histogram.

 o Determine the sigmas for the reference and each other receptor to use
   in a MATHS qif expression.

 o Smooth with BLOCK instead of FINDBACK to incorporate some spatial
   smoothing.  Then obtain the standard deviations used in the qif
   expression.  Also smooth before any masking of low-S/N regions.
heterodyne: Clarify and correct the prologue.
heterodyne: Validate velocity constraints.

 o Ensure the velocity limits values are floating point.
 o Check that we have the correct WCS Domain and units, and if not, ignore
   the velocity limits and issue warning.
heterodyne: Restore a line unitentionally removed.

Introduced at Commit b4236390ddb712e4cc09eabfc5acfcce7addb3c8.
The line was present in the other steering file.
heterodyne: Cope with a new special case.

Some early spectra are entirely bad save some noisy edges, so would
pass through the not-all-bad test in this primitive.  Whereas later
we trim these edges, normally retaining the central 85%, and this
section would be bad.  So look for the SPECTRAL_TRIMMED internal header
and mimic what later primitives will do, and hence test for goodness
in the section actually used in recipes.