Carve four new modules out of typecheck_errors.m.

The resulting modules have much better cohesion.

compiler/typecheck_error_overload.m:
    New module containing predicates that report type overloading errors.

compiler/typecheck_error_undef.m:
    New module containing predicates that report references to undefined
    predicates, functions, data constructors, and events.

compiler/typecheck_error_type_assign.m:
    New module containing predicates that print and process type_assigns
    and args_type_assigns.

compiler/typecheck_error_util.m:
    New module containing general utility predicates for dealing with
    type errors.

compiler/check_hlds.m:
compiler/notes/compiler_design.html:
    Include and document the new modules.

compiler/typecheck_errors.m:
    Delete the code that this diff moves to the new modules.

    Reorder the remaining predicates to put related predicates
    next to each other. Give some predicates new names to reflect
    these groupings.

    Mark as such one predicate that has been unused for a while.

    Use different names for variables used for different purposes.

compiler/typecheck.m:
    Conform to the changes in predicate names.

    Move some utility predicates to the end of the module.
