Fix end level logic

#### What's this PR do?
This brings the logic that evaluates our config's `conditions` objects outside of the scope of just a single function to be used by other areas of the game controller. Specifically, we're now also using it to determine the group message the players get when they all reach the end of a level.

#### Where should the reviewer start?
`function evaluateCondition`
The contents of this are the same as what was previously in `getEndLevelMessage()`.

`getEndLevelGroupMessage`
Logic in here was redone so that we just try to find out which condition is matched by the most players. The one with the most is selected as the next message for the group.

#### Any background context you want to provide?
This solves a problem that was found with the previous logic that didn't sufficiently cover the cases we needed for one of the games.