Switch the effective and real group IDs of the current process. If a
block is given, the group IDs will be switched back after the
block is executed. Returns the new effective group ID if called without a
block, and the return value of the block if one is given.