[gae.py] Stage *.go files before calling "gcloud app deploy".
[gae.py] Stage *.go files before calling "gcloud app deploy".

In Go Modules mode "gcloud app deploy" just uploads ALL files
in a module (e.g. all luci-go files), together with go.mod and
assumes GAE Cloud Build builder will be able to compile binaries
from them.

This is problematic for at least two reasons:
1. It takes forever to upload 33050 files to Google Storage (this
   is the number reported by "gcloud app deploy" when deploying
   a luci-go app in Go Modules mode). It will have to be done each
   time we deploy *any* luci-go GAE app.
2. If go.mod has "replace" directives, they are ignored, resulting
   in a deployment that differs from local files on disk. This is
   problematic when deploying GAE apps hosted in infra.git.

Instead we now analyze Go code locally and stage it into a fake
GOPATH with *.go files needed by the app (and only them!), and pass
this to "gcloud app deploy" so it doesn't even see tens of thousands
of unrelated files.

This algorithm is already used to build tarballs for automated GAE
deployment, we just reuse it here. For that we need cloudbuildhelper
in PATH (it does the actual work of analyzing and staging go code).

This works in both GOPATH and Go Modules, but for now this mechanism
is disabled unless GAE_PY_USE_CLOUDBUILDHELPER=1 env var is set.

R=40f3d43a28ebae3cb819288542e1c84d73d962d5@chromium.org, tandrii@chromium.org
BUG=1057067

Change-Id: Ibafaaba567c3112d4168b47c9acbc00819e9255f
Reviewed-on: https://chromium-review.googlesource.com/c/infra/luci/luci-py/+/3017219
Commit-Queue: Vadim Shtayura <9f116ddb1b24f6fc1916a676eb17161b6c07dfc1@chromium.org>
Reviewed-by: Robbie Iannucci <40f3d43a28ebae3cb819288542e1c84d73d962d5@chromium.org>

luci/luci-py,luci/luci-py,luci/luci-py,luci/luci-py