Clean up ImageOutput handling of unknown or mismatched data formats

Implement new rule for ImageOutput: if the spec passed to open() has
spec.format == UNKNOWN, then select a default data format for the output
file that is "most likely to be able to be read."  Also,
ImageOuput::open() will never fail because a requested data format is
unavailable; a reasonable default will always be chosen.

Along the way, fixed a few buggy behaviors in some of the plugins for
certain format combinations.