Don't print type mismatches as errors if they aren't.

Suppose there is a type error in argument i of a term. If another argument j
is the variable A, and if the compiler knows that e.g. variable A's type
is either bool or maybe, (likely after having seen "A = no"), then we used
to print a message about a type mismatch not just for argument i, but for
argument j as well. If argument j's expected type was bool, we would have
printed a mismatch about A's being actual type being maybe, and vice versa.

This diff stops that. If there is a type assignment in which an arguments'
actual type matches its expected type, we don't print a misleading mismatch
message about that argument.

compiler/typecheck_errors.m:
    As above.

tests/invalid/type_error_in_arg.{m,exp}:
    A new test case to test the compiler's error messages in this situation.

tests/invalid/Mmakefile:
    Enable the new test case.