ImageBufAlgo::constrast

There are 4 public functions, to allow the user maximum control over how
he applies contrast. He can specify one pivot and one contrast value for
all channels, one pivot for all channels and contrast values per
channel, etc.

Each of these 4 functions only prepare the arguments, nothing else, and
then they call another function that does input validation and that
function then calls contrast_impl.

It only makes sense to apply contrast to the luminance channel if only
one pivot and one contrast value is specified, that is why one of the
public functions has an additional parameter luminance.
Several LG changes to Stefan's contrast functionality.
* Pare down the number of contrast() variants to only two: one that takes
  the full per-channel contrast and pivot arrays, and one that takes scalars
  and adds contrast to the luminance (we call this contrast_lum).
* Use more modern idioms for type dispatch and parallelism in IBA::contrast.
* Don't clamp to 1 -- allow high dynamic range input and output. Add a
  parameter to the contrast functions specifying whether or not they should
  clamp to 0 as a lower bound.
* Changed luminance to assume Rec709 primaries and linear response; the
  previous one is a commonly-used formula that is also commonly misunderstood,
  as it has 2.2 gamma correction built into it.
* In oiiotool, simplify the error checking by assuming that if not enough
  contrast or pivot values are supplied, they will default to 1 and 0.5,
  respectively; and if too many, the extras will be ignored.  Also simplify
  the handling of alpha channels by assuming that all channels have pivots
  and contrast scales, and that non-color channels like alpha will be
  given a scale of 1.0, or users gets what they deserve.
Document oiiotool --contrast
testsuite for oiiotool --contrast