LList is a built-in type-producing function.  It provides linear lists
consisting of elements of the argument type.  It is different from the "List"
function in that the resulting type provides a version of the "cons" function
which is lazy in its second argument.  Thus the tail of a list is not
necessarily computed until it is actually needed.  This allows the manipulation
of conceptually infinite objects.

The signature of LList is:

    LList: func[t:type{}] type l {
                New; :=; V;
                '' : func[] val l (*empty list*);
                is_nil : func[val l] val Boolean (* is empty *);
                cons: func[val t; val l] val l;
                            (* add at left end *);
                cons: func[val t; func[] val l] val l;
                            (* cons, second argument lazily evaluated *);
                head: func[val l] val t (* first element, error if empty *);
                tail: func[val l] val l (* all but first, error if empty *);
           }

New initializes to '' or nil.
Note that the reverse cons function of "List" is not provided.  Unlike
"List", "LList" is primitive; it is not possible to implement it in
Russell without extensive use of impure functions and the -L option.

Implementation Note:  For reasons not entirely understood by the author,
the implementation appears to be noticably more efficient than that obtainable
in most LISPs.

