Add type check passes on struct bodies.  That way, if have variables
declared that need multiple passes (eg., a map of structs), will
resolve these.
Previous type checking did not allow nested structs.  Eg.,

Struct Outer
{
    Struct Inner inner;
}

Struct Inner
{
    Number num;
}

because when perform type checking on Struct Outer, do not know
definition of StructInner.  This commit keeps track of fields in each
struct that point to other structs and that are then fixed up after
first pass.