[git] Introduce GitRemoteBranch, GitSvnRemoteBranch, GitLocalBranch

There is a significant difference between local and remote branches (the latter have 2 name formats and a link to a remote) => use separate classes for them.
git-svn has also different syntax.

TODO: GitRepositoryReader still initializes a GitBranch object, which is not fair, but the right initialization required pre-reading the list of remotes.
GitRemote: equals, hashcode: compare only by name.

There can't be different remotes with equal names.
Later a warning will be added if two remotes equal by name differ by other parameters.
[git] GitRepository#update: remove TrackedTopic, always update everything.

Experiments show that updating everything is very fast (~10 ms for IJ Community).
Updating selected topics complicates the code a lot and makes the desynchronization between cached values more possible.

Therefore remove TrackedTopic and substitute all calls to update(TrackedTopic) to update() which now updates everything.
[git] Create fair GitRemoteBranches, read repository data in fixed order.

Read repository data in the following order:
1. read .git/config, parse ini to structures inside the GitConfig class.
2. parse GitRemotes, return them to GitRepository, store in a field.
3. read references (GitRepositoryReader), and create fair GitRemoteBranch instances using the supplied GitRemotes.
4. parse tracking information from GitConfig using the full-formed branches collection (not used yet).

Details:
* GitConfig: store the data read from the config file in internal structures. Parse on request. Parse tracking information with the help of passed GitBranches.
* Store GitRemotes and GitBranchTrackInfos in the GitRepositoryImpl, and get them from it. Therefore remove getConfig().
* Introduce GitBranchUtil.parseRemoteBranch to parse Git[Svn]RemoteBranch and reuse it in GitRepositoryReader, and in the LowLevelAccessImpl (deprecated old-style usage, but still).
* Fix GitRepositoryReaderTest, make it GitLightTest, adjust config according to new algorythm which ignores remote branches without corresponding remotes.
[git] Fix GitConfig test.
GitRepositoryReader: since the assertion in GitBranch.equals is disabled, remove the ineffective code of adding packed-branches to the set.
Should use restart icon for rerun button.
Stop button in run manage.py task tool window (PY-5849).
@NotNull
[git] Continuing embedding GitRemoteBranches.

* Make GitRemoteBranch abstract, and make GitSvnRemoteBranch & GitStandardRemoteBranch extend it.
   Remote branches are used everywhere, no need to make difference between normal and svn remotes on such an early step as in GitBranchesCollection, GitBranchTrackInfo, etc.

* Make GitBranchTrackInfo hold GitLocalBranch and GitRemoteBranch instead of Strings.

* Substitute Strings and GitBranch objects to GitLocalBranch & GitRemoteBranch in many places where needed.

* Introduce GitRemoteBranch#getNameForLocalOperations (origin/master) and getNameForRemoteOperations(master).
Fix GitConfigTest: supply local and remote branches.
git tests: some deprecations
[git] Fix tests, extend GitLightTest.
GitPusher.NO_TARGET_BRANCH: deprecate, fix fake remote
[git] Fix method signature to accept GitLocalBranch
[git] GitConfig: strip refs/heads or /remotes prefix before searching for branches
[git] Fix local vs remote branch messed up in the Branches popup
Merge remote branch 'origin/master'

Conflicts:
	plugins/git4idea/tests/git4idea/roots/AbstractGitRootTest.groovy
	plugins/git4idea/tests/git4idea/roots/GitRootDetectorTest.groovy
	plugins/git4idea/tests/git4idea/roots/GitRootErrorsFinderTest.groovy
Merge remote branch 'origin/master'
Merge remote-tracking branch 'origin/master'