[ci] Update to Xcode 13 everywhere (#1103)

In the previous update PR I missed that there were two places that the macOS image was specified. This fixes that by combining them into a single task entry, and also extracts the macOS tempate, making the structure match flutter/plugins so that updating is consistent across repositories.
diff --git a/.cirrus.yml b/.cirrus.yml
index ce62ba0..f67d967 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -7,6 +7,13 @@
   tool_setup_script:
     - .ci/scripts/prepare_tool.sh
 
+macos_template: &MACOS_TEMPLATE
+  # Only one macOS task can run in parallel without credits, so use them for
+  # PRs on macOS.
+  use_compute_credits: $CIRRUS_USER_COLLABORATOR == 'true'
+  osx_instance:
+    image: big-sur-xcode-13
+
 flutter_upgrade_template: &FLUTTER_UPGRADE_TEMPLATE
   upgrade_flutter_script:
     # Master uses a pinned, auto-rolled version to prevent out-of-band CI
@@ -129,38 +136,31 @@
         - dart testing/web_benchmarks_test.dart
 
 task:
-  name: ios-build+platform-test
-  use_compute_credits: $CIRRUS_USER_COLLABORATOR == 'true'
-  osx_instance:
-    image: big-sur-xcode-12.4
-  env:
-    PATH: $PATH:/usr/local/bin
-    matrix:
-      CHANNEL: "master"
-      CHANNEL: "stable"
+  << : *MACOS_TEMPLATE
   << : *FLUTTER_UPGRADE_TEMPLATE
-  build_script:
-    # Exclude rfw until the next Flutter stable release because it depends
-    # on features that have never shipped to stable. (The rfw package has
-    # never worked on stable so this is not going to break anyone.)
-    # When updating this, also look at the android tests above.
-    # When updating this, also update the `rfw/run_tests.sh` file.
-    - if [[ "$CHANNEL" == "master" ]]; then
-    -   ./script/tool_runner.sh build-examples --ios
-    - else
-    -   ./script/tool_runner.sh build-examples --ios --exclude=rfw
-    - fi
-
-task:
-  name: local_tests
-  use_compute_credits: $CIRRUS_USER_COLLABORATOR == 'true'
-  osx_instance:
-    image: big-sur-xcode-13
-  env:
-    PATH: $PATH:/usr/local/bin
-    matrix:
-      CHANNEL: "master"
-      CHANNEL: "stable"
-  << : *FLUTTER_UPGRADE_TEMPLATE
-  local_tests_script:
-    - ./script/local_tests.sh
+  matrix:
+    - name: ios-build+platform-test
+      env:
+        PATH: $PATH:/usr/local/bin
+        matrix:
+          CHANNEL: "master"
+          CHANNEL: "stable"
+      build_script:
+        # Exclude rfw until the next Flutter stable release because it depends
+        # on features that have never shipped to stable. (The rfw package has
+        # never worked on stable so this is not going to break anyone.)
+        # When updating this, also look at the android tests above.
+        # When updating this, also update the `rfw/run_tests.sh` file.
+        - if [[ "$CHANNEL" == "master" ]]; then
+        -   ./script/tool_runner.sh build-examples --ios
+        - else
+        -   ./script/tool_runner.sh build-examples --ios --exclude=rfw
+        - fi
+    - name: local_tests
+      env:
+        PATH: $PATH:/usr/local/bin
+        matrix:
+          CHANNEL: "master"
+          CHANNEL: "stable"
+      local_tests_script:
+        - ./script/local_tests.sh