This pass builds builds the symbol table as part of the syntax tree.
Identifiers are set up to point to a list of possible declarations for
them.  The exact declaration is usually not determined until the signature
checking pass (pass4) when overloading can be resolved.


                   Symbol Table Organization

    The symbol table is kept as a set of back pointers in the syntax tree.

    1) An identifier node is one of:
        a) operator identifier
        b) letter identifier

    2) From an identifier node, last_definition points at a definition
       for that identifier in smallest enclosing scope.

    3) A definition for an identifier is one of:
        a) declaration definition
        b) parameter definition
        c) type signature definition
        d) A modified type primary. This contains a pointer to
           one of the following kinds of modifiers:
            i)   with list definition
            ii)  export list definition
            iii) hide list definition
           The fields described here are actually present in these
	   modifiers.
	e) The identifier itself.  This happens whenever the identifier
	   is the defining instance for a type component.

    4) From a definition node, previous_definition points at a definition
       for that identifier in the same scope or in the smallest enclosing
       scope.

    5) From a declaration node, decl_scope points at the block in which
       the declaration appeared.

    6) From a parameter node, par_scope points at the function signature
       in which the parameter appeared.

    7) Since certain identifier nodes are both shared
       and sometimes do not refer to the immediately surrounding definition
       of that name (e.g. Boolean), id nodes with non-NIL last definition
       fields are not touched. This is only true for usage, not a
       definition.
      
    8) From an identifier or string node use_list points to the next 
       enclosing use list (NIL if there is none).

    9) From a use list node previous_list points to the next surrounding
       use list.
