Iteratively build up the connections for the RelatedChangesTab.

On slower machines, walking and indexing 30k items can take a while.
Do this iteratively so the script does not block other events for
too long.

Change-Id: Ic4cd70fb2da29e0342536c70f3d7c57280190b2d
Merge "Iteratively build up the connections for the RelatedChangesTab."
Remove unused removeKeyMap JSNI glue

Change-Id: If7a5ee28578436b9570ab9e1e0ace7463c95508b
Add an ApprovalsUtil method for getting reviewers

Various different places in the code were replicating the behavior
that a user with nonzero votes on some patch set of a change is
called a "reviewer" and a user with only zero votes is called a "cc".
Consolidate this in ApprovalsUtil, using an explicit enum of reviewer
states.

This also happens to eliminate most uses of
patchSetApprovals().byChange().

Change-Id: I1836de83e86145a20a3c100f19a31f98bb3ca64b
Move more functionality from elsewhere into ApprovalsUtil

The commonality of these methods is they will have a different
implementation when approvals are read from an eventual notedb, so
it makes sense to keep them located together.

Change-Id: I5de63a4210f29863274111964480fb1f5720ca60
Use ApprovalsUtil from PushOneCommit

This requires a bit of package reorganization, since GerritServer now
needs to bind PushOneCommit.Factory, so they must be in the same
package to avoid a circular import.

Change-Id: Id99abec0c297a36f6ba628e58b49197e9aabf5d5