move visible custom method into a custom queryset

now it's more flexible to filter visible groups. you can use queries such as

- Group.objects.visible().filter(**kwargs)
- Group.objects.filter(**kwargs).vislble()