[ddc] Optimize list control flow operations
[ddc] Optimize list control flow operations

Allows spread, collection for and collection if in list literals to
avoid unnecessary checks that the list is growable/modifiable and type
checks when adding the elements to the list.

Use a `push()` on the underlying JavaScript Array rather than calling
the exposed `add()` method.

The related ListCopy benchmarks show a performance increases between
10-40%.
https://golem.corp.goog/Comparison?repository=dart&team=dartdevc#targetA%3Ddartdevc%3BmachineTypeA%3Dlinux-x64%3BrevisionA%3D89256%3BpatchA%3Dnshahan-optimize-list-add%3BtargetB%3Ddartdevc%3BmachineTypeB%3Dlinux-x64%3BrevisionB%3D89253%3BpatchB%3DNone


Change-Id: I7e3ac3044d2af319a7ea40bbceef1d65ecec8261
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/172082
Reviewed-by: Mark Zhou <654f5fe0c4ca6c799b0e735dcf3fc1c389f35bf9@google.com>
Reviewed-by: Stephen Adams <60cb5b73b7e0cb7dcda53302da4fab6ecfc7fa8b@google.com>
Commit-Queue: Nicholas Shahan <03847abd2d8aadfe859ecb98095a31f9f515dc47@google.com>

dart-lang/sdk,dart-lang/sdk,dart-lang/sdk,dart-lang/sdk,dart-lang/sdk,dart-lang/sdk,dart-lang/sdk,dart-lang/sdk