Workaround for FOR-EACH temporary hold on object in HELP
Workaround for FOR-EACH temporary hold on object in HELP

The help system is based on FRAME! objects which store notes for each
key in the frame (about types or just textual parameter descriptions).
Creating specializations and chains doesn't copy these notes from the
original object at first...they are inherited.  A copy is only made
if the user REDESCRIBEs the derived function.

Hence HELP goes through an inheritance process to coalesce the metadata
about the function.  It looks at every parameter and sees if that
parameter has a description in the derived function, and if not it
gets the parameter from the parent.  This process creates a temporary
frame describing all the parameters that HELP renders.

This process was using an enumeration of keys out of the frame and then
attempting to modify fields in the same object in the same pass.  In
the general case, modifying the object while enumerating it can break
FOR-EACH, e.g. if the object were to expand it could be relocated,
which would disrupt pointers used in the enumeration.

It would technically be sufficient in object enumeration to only put
a hold on object *expansion*--though that would require a new category
of SERIES_INFO_HOLD_XXX flag and would require some thinking about the
ramifications.  This does the simpler thing and enumerates the word
list...not the object directly, so it's enumerating a block and not
the object.

draegtun/ren-c,giuliolunati/ren-c,giuliolunati/ren-c,draegtun/ren-c,hostilefork/rebol,draegtun/ren-c,giuliolunati/ren-c,rgchris/ren-c,hostilefork/rebol,giuliolunati/ren-c,rgchris/ren-c,draegtun/ren-c,draegtun/ren-c,hostilefork/rebol,giuliolunati/ren-c,hostilefork/rebol,rgchris/ren-c,draegtun/ren-c,hostilefork/rebol,hostilefork/rebol,rgchris/ren-c,rgchris/ren-c