Establish a convention for Requirement names

The name attribute of requirements is used when generating options for
the :optional and :recommended dependency tags.

Unless otherwise specified, the name attribute of a Requirement will be
populated by stripping any module prefixes from the beginning and
"Dependency" or "Requirement" from end of the class name and downcasing
the result.

Closes #17759.
Simplify this regexp
GitDownloadStrategy: split #fetch into several methods
GitDownloadStrategy: split up submodule update and checkout
GitDownloadStrategy: extract checkout from #stage