GitConfig: use ContainerUtil instead of Guava's Collections2

ContainerUtil's methods are enough here,
while Guava's FilteredCollection doesn't override equals(),
and is more difficult to follow while debugging.
[git] Synchronize GitRepository data update, notify only when needed.

Encapsulate all repository data (current branch, remotes, branches,
etc.) to GitRepoInfo; store the reference in a volatile field; just
change the reference on update().

Otherwise the information could have been in an inconsistent state
(e.g. current branch might have been deleted after it was included
into myBranches).

Check the state change before notification, not to notify after each
update() even if nothing changed.
GitRepoInfo: include currentRevision and state into equals & hashcode
no null anchors in stdout
IDEA-106227 (Incorrect inspection "Local variable is redundant' in try-with-resources clause)