Add iOS toolchains, platforms, and constraint_values (#2090)

Refactored the description of target platforms. The source of truth is
now the PLATFORMS table go/private/platforms.bzl. Declarations for
config_settings in //go/platform; constraint_values and aliases in
//go/toolchain; and toolchains in @go_sdk are generated from this
table.

In addition to the normal GOOS_GOARCH list, there are some additional
entries for iOS. iOS platforms still have GOOS=darwin, but they are
compatible with a different constraint_value
(@bazel_tools//platforms:ios instead of @bazel_tools//platforms:osx).

There are also separate platforms for pure mode, and cgo (with _cgo suffix).
Cross compilation may still be done with (for example)
--platforms=@io_bazel_rules_go//go/platforms:linux_amd64, and this
no longer requires a configured C/C++ toolchain. To cross-compile with cgo,
use --platforms=@io_bazel_rules_go//go/platforms:linux_amd64_cgo.
A compatible configured C/C++ toolchain is required in that case.

Fixes #2079
20 files changed