Changed rules for reference types passed between endpoint method
calls.  Unless the argument is specifically declared external, the
reference type will be copied.  This is because we want to exclude
one connection's peered reference type's being assigned into another
connection's endpoint global data (or peered data).
Refactored variable declaration code.  Had two paths for essentially the same code (declaration of endpoint globals and declaration of statements in general).  Combined these so that both paths called common functions.  Additionall, beginning to set up special emitting for struct types.
Added dot statement accessor for user structs, and changed code so
that will initialize user structs with a dictionary of their field
names.  Added a test case as well.
Had accidentally always been appending value types onto lists with append statement.  Fixed + added a test for it in misc_tests.wld.
Wanted to allow user-defined structs to self-reference.  Ie,

Struct SomeStruct
{
    List(element: SomeStruct) next_prev_pointers;
}

Before this commit, type checking prevented this, saying that
SomeStruct was not defined when trying to type check
next_prev_pointers.  This commit fixes that.

Note that the type checker will still throw an error for the case:

Struct SomeStruct
{
    Struct SomeStruct inner_struct;
}

because of infinite recursion.
Started adding some preliminary test cases for nested user structs.
Added a test case for passing user struct data through a method.