patch 8.2.0154: reallocating the list of scripts is inefficient

Problem:    Reallocating the list of scripts is inefficient.
Solution:   Instead of using a growarray of scriptitem_T, store pointers and
            allocate each scriptitem_T separately.  Also avoids that the
            growarray pointers change when sourcing a new script.
diff --git a/src/vim9script.c b/src/vim9script.c
index 4596ce3..fb19258 100644
--- a/src/vim9script.c
+++ b/src/vim9script.c
@@ -32,7 +32,7 @@
     void
 ex_vim9script(exarg_T *eap)
 {
-    scriptitem_T *si = &SCRIPT_ITEM(current_sctx.sc_sid);
+    scriptitem_T *si = SCRIPT_ITEM(current_sctx.sc_sid);
 
     if (!getline_equal(eap->getline, eap->cookie, getsourceline))
     {
@@ -114,7 +114,7 @@
     void
 free_imports(int sid)
 {
-    scriptitem_T    *si = &SCRIPT_ITEM(sid);
+    scriptitem_T    *si = SCRIPT_ITEM(sid);
     int		    idx;
 
     for (idx = 0; idx < si->sn_imports.ga_len; ++idx)
@@ -226,7 +226,7 @@
     if (*tv.vval.v_string == '.')
     {
 	size_t		len;
-	scriptitem_T	*si = &SCRIPT_ITEM(current_sctx.sc_sid);
+	scriptitem_T	*si = SCRIPT_ITEM(current_sctx.sc_sid);
 	char_u		*tail = gettail(si->sn_name);
 	char_u		*from_name;
 
@@ -279,7 +279,7 @@
     if (*arg_start == '*')
     {
 	imported_T *imported = new_imported(gap != NULL ? gap
-					: &SCRIPT_ITEM(import_sid).sn_imports);
+					: &SCRIPT_ITEM(import_sid)->sn_imports);
 
 	if (imported == NULL)
 	    return NULL;
@@ -289,7 +289,7 @@
     }
     else
     {
-	scriptitem_T *script = &SCRIPT_ITEM(sid);
+	scriptitem_T *script = SCRIPT_ITEM(sid);
 
 	arg = arg_start;
 	if (*arg == '{')
@@ -358,7 +358,7 @@
 	    }
 
 	    imported = new_imported(gap != NULL ? gap
-					: &SCRIPT_ITEM(import_sid).sn_imports);
+				       : &SCRIPT_ITEM(import_sid)->sn_imports);
 	    if (imported == NULL)
 		return NULL;