Stop GraphQL rules losing labels, assignees, and reviewers
What does this MR do and why?
On a rule that mixes REST and GraphQL conditions, no_additional_labels matched every resource and {{labels}} rendered empty. The GraphQL query never selected labels, but the normalizer wrote an empty labels key anyway and the engine merged it over the labels REST had returned. It now writes the key only when the response carries one.
On a GraphQL-only rule, remove_reviewers and remove_assignees removed nobody and printed nothing. The query builder picked its fields from the rule's conditions, which never mention either action, so the users were missing from the resource by the time the action read them. The rule's actions now reach the builder alongside its conditions.
Beyond what the issue asked for, a field named by an action's placeholder is selected too, so comment: "ping {{assignees}}" renders on a GraphQL-only rule. Both fields are guarded by resource type, because epics have no assignees and reviewers exist only on merge requests.
When a rule sets reviewers, the update action now checks that the PUT response lists them, the same way it already checks assignees. GitLab can return success while leaving out a reviewer it could not request, so a reviewers action could otherwise do nothing and raise no error. Both checks now ignore the case of a username, because the users lookup does too, and an exact match raised an error after a write that had worked.
Related: #406