Structured errors for getopt and getopt_io.

The getopt and getopt_io modules use strings to describe errors that occur
during option processing.  There are a couple of problems with doing this:

(1) it makes some assumptions about how client programs want to word, and to a
large extent, format these error messages.

(2) it assumes that the error messages are in English.

This diff changes the getopt and getopt_io modules to use structured
representations of errors instead of strings.  This structured representation
is defined by the new option_error/1 type.  We introduce new versions of the
various process_options predicates that are suffixed with "_se" (standing for
"structured error") that return values of type option_error/1 when an error occurs.
A new function, option_error_to_string/1, converts option_error/1 values into
the strings that the getopt and getopt_io modules previously generated.  The
existing process_options predicates are just wrappers around all of this for
the purposes of backwards compatibility.

The new option_error/1 type returns more information than existing error
messages require, for example, where possible we return both the element of the
option enumeration involved and a string giving the option as it actually
appeared on the command line.

library/getopt.m:
library/getopt_io.m:
	Add predicates and types for structured errors as described above.

	Group function clauses together with the corresponding predicate
	ones.

	Avoid unnecessary differences between these two modules in a few
	spots.

NEWS:
	Announce the above changes.