Resolve Go and C++ toolchains for each Go target (#4439)

**What type of PR is this?**

Bug fix

**What does this PR do? Why is it needed?**

Before this change, rules_go would resolve the C++ toolchain for a fixed
helper target and use it in Go targets via a provider. This results in
problems for multi-platform builds since the execution platform of the
C++ toolchain needs to match that of the Go toolchain, which can only be
enforced if both toolchain requirements are declared on the same rule.

**Which issues(s) does this PR fix?**

Fixes #4127 
Work towards
https://github.com/bazel-contrib/rules_go/pull/3740#issuecomment-1904816340

**Other notes for review**
5 files changed