Fixes #4525: implements gatekeeper "modes" for determining group content availability

This branch extends mrclay:4525_19, changing to a model that could support multiple gatekeeper strategies, and I think leaves a clearer API to match the previous branch's UI. This also moves most of group_gatekeeper into ElggGroup::gatekeeper().