Improve the cohesion of modules.m.

Once upon a time, modules.m contained all the code in the compiler that dealt
with interface files, and it was by far the biggest module in the compiler
(almost 9000 lines). Once before, I moved cohesive bunches of functionality
out of modules.m into new modules, such as file_util.m and module_cmds.m.
This diff does likewise, creating three new modules.

Besides that main task, it has two minor algorithmic changes that should
have no overall effect on correctness. First, it merges some traversals of
the item list, which should yield a very minor speedup, and second,
in order to avoid the need for an undesirable module import, it eliminates
an unnecessary sorting of the item list that we used to do when reading
in interface files. (The sorting makes sense only when *creating* interface
files).

This diff also gives more meaningful names to some predicates.

compiler/module_deps_graph.m:
    This new module defines the module dependency graph, and provides
    predicates for building it and using it.

compiler/write_module_iterface_files.m:
    This new module does what its name says it does.

compiler/item_util.m:
    This new module contains utility predicates that deal with items that are
    now needed in more than one module.

compiler/parse_tree.m:
compiler/notes/compiler_design.html:
    Include the new modules.

compiler/write_deps_file.m:
    Move some predicates here from modules.m, since they belong here.
    E.g. one prints .d files, and related code to print .dv and .dep files
    was already here.

compiler/mercury_compile.m:
    Move a predicate here from modules.m, since it was only called from here,
    and related code is also here.

compiler/prog_item.m:
    Move a predicate here from modules.m, since it is a utility predicate
    for a type that is defined here.

compiler/prog_type.m:
    Move a predicate here from modules.m, since it is a utility predicate
    for types, like all the other predicates in this module.

compiler/modules.m:
    Remove the code that is now in other modules. Impose some structure
    on the remaining code. (It used to be too jumbled up to make much sense of,
    which was one reason why working with this code was unnecessarily hard).

compiler/deps_map.m:
    Note the relationship to the new module module_deps_graph.m.

compiler/*.m:
    Import the new modules as well as (or instead of) modules.m, and/or conform
    to new names for predicates.
Print more specific errors when creating an mdb breakpoint fails.

trace/mercury_trace_spy.c:
    When giving a command such as

        mdb> break badfilename.m:42

    and the debugger has no information about any file named "badfilename.m",
    print an error message that says just that. If the file exists but the
    line number doesn't, say that. Previously, the error message didn't tell
    the user whether it was the filename or the line number that was in error.

trace/mercury_trace_tables.[ch]:
    Collect the information that mercury_trace_spy.c needs for its new task.

tests/debugger/breakpoints.{inp,exp,exp2}:
    Add a test of both kinds of bad breakpoint specification to this test case.
Print precise contexts for duplicate field names.

compiler/add_type.m:
    Record the context of the field name, not the context of the data
    constructor as a whole. The more fields a constructor has, and the
    more extensive comments they each have, the more misleading the
    overall context will be. (The code that uses these contexts does not
    need changing.)

compiler/prog_data.m:
    To store the information that add_type.m needs, create a space for
    the context of each field name next to the name itself. This requires
    breaking an old type equivalence; most of the "conform" changes below
    result from this.

compiler/prog_io_type_defn.m:
    When parsing type definitions, record the context of each field name
    in the new space.

compiler/field_access.m:
compiler/hlds_data.m:
compiler/hlds_pred.m:
compiler/make_hlds_passes.m:
compiler/mercury_to_mercury.m:
compiler/ml_code_util.m:
compiler/prog_type.m:
compiler/recompilation.check.m:
compiler/type_ctor_info.m:
compiler/typecheck.m:
compiler/typecheck_errors.m:
compiler/xml_documentation.m:
    Conform to the changes above.

compiler/post_typecheck.m:
    Conform to the changes above.

    Move some code out of a loop.

    Give a predicate a more meaningful name.

tests/invalid/repeated_field_name.{m,err_exp}:
    A new test case for this change, which defines a field named f2
    three times. Before this change, the compiler reported:

    repeated_field_name.m:008: Error: field `repeated_field_name.f2' multiply
    repeated_field_name.m:008:   defined.
    repeated_field_name.m:008:   Here is the previous definition of field
    repeated_field_name.m:008:   `repeated_field_name.f2'.

    which is a bit baffling. We now report

    repeated_field_name.m:011: Error: field `repeated_field_name.f2' multiply
    repeated_field_name.m:011:   defined.
    repeated_field_name.m:010:   Here is the previous definition of field
    repeated_field_name.m:010:   `repeated_field_name.f2'.
    repeated_field_name.m:012: Error: field `repeated_field_name.f2' multiply
    repeated_field_name.m:012:   defined.
    repeated_field_name.m:010:   Here is the previous definition of field
    repeated_field_name.m:010:   `repeated_field_name.f2'.

    which gives the correct contexts, and also reports BOTH duplicates.
    (Previously, we generated two identical error messages, but then sorting
    the list of errors removed one of them.)

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