Ref is a built-in function which produces reference or pointer types.
Its signature is:

    Ref: func [T: type {}]
              type t { := : func [var t; val t] val t;
                       = :  func [val t; val t] val Boolean;
                       New: func [] var t;
                       Nil: func [] val t;
                       V:   func [var t] val t;
                       In:  func [var T] val t;
                       Out: func [val t; var Void] var T;
                       ^ :  func [val t; var Void] var T;
                     };

The In function takes a variable of the argument type and produces
a reference value, which may then be used as a component of a
product, etc.  The Out function is type-safe only because it requires
a var Void parameter, indicating that it may depend on, and change,
anything.

The "^" operator is equivalent to Out, and allows Pascal-like dereferencing
notation.

Reference types are meant to be avoided as much as possible.
Use recursive products.

Implementation Note:  It is frequently useful to build a "create"
function, which allocates a new object and returns a pointer to it.
This can be most efficiently done by defining a macro create(T)
to be (Ref[T])$In[T$New[]].  It is also possible to add a create
function to the reference type (using a with clause), but, for
the moment, this generates worse code.
