iconGrid: Create icon clones in a separate loop

For reasons not yet fully understood,
  ```
  Main.uiGroup.add_actor(actor.clone);
  ```
takes milliseconds to complete (e.g. 10-11ms on an i7-7700 if gjs is
built without optimization).

Because of this, each `actor.opacity = 0;` has a good chance of falling
on a different frame. And when it does, `_opacityChangedId` also lands
on multiple different frames each incurring a separate relayout cycle.
It is this excessive number of relayouts that causes stuttering in the
icon grid animation (#2065). But it is the slowness of
`uiGroup.add_actor` that causes the number to be excessive when it should
be one.

By creating the clones and completing the slow task of adding them to
`uiGroup` early, we then enable the loop starting the animation to complete
within a single frame. And by completing within a single frame all the
opacity changes land within the same frame interval, thus incurring only
a single relayout instead of many.

This issue went unnoticed until 004a5e10 (!704), after which the slow
execution of the loop in `animateSpring` leading to slow emissions of
`notify::opacity` became a more visible performance problem.

Closes: GNOME/gnome-shell#2065

GNOME/gnome-shell!1002
6 jobs for !1002 with fix-2065-v2 in 4 minutes and 50 seconds (queued for 2 seconds)
detached
Status Job ID Name Coverage
  Review
passed #592051
check_commit_log

00:00:27

passed #592053
eslint

00:01:18

passed #592052
js_check

00:00:31

 
  Build
passed #592054
build

00:02:17

 
  Test
passed #592055
test

00:01:03

passed #592056
test-pot

00:01:14