[xctool] reduce build-tests overhead by invoking xcodebuild only once

### Summary

Instead of repeatedly invoking `xcodebuild` for each project/target pair to be built for `run-tests`, generate a temporary workspace and scheme, and invoke `xcodebuild` only once. 

This should produce identical results as previous method due to the output directories being overridden anyways. 

This reduces time taken by `xcodebuild` to load projects and do dependency analysis, and avoids revisiting dependent targets across different invocations.

This drops `build-tests` run time on an already-built repo from 130 seconds to 50 seconds, with 20 seconds of it being the initial `showBuildSettings` overhead.

### Test Plan

Identical targets being built and run with `build-tests` and `run-tests` in both old and new versions. No files were deposited in the DerivedData folder of the temporary workspace.