repo, language/go: refactor Go-specific functionality out of repo (#647)

Added experimental interfaces RepoUpdater and RepoImporter to
language.Language. update-repos now iterates over the list of
languages, finding a Language that also implements one of these
interfaces. update-repos still contains language-agnostic rule
merging, pruning, and macro handling logic.

Most Go-specific code is moved from repo to language/go. There is
still a lot of Go-specific code in repo.RemoteCache. This will be
moved eventually. The plan is to add a Do method that takes a function
and stores an arbitrary key/value pair, much like
cmd/go/internal/par.Cache.

Updates #619
37 files changed