Fix bug 1051819: Fix reduce empty set bug and hide invisible categories.

Instead of attempting to reduce an empty set when `links` is called on
a Category with no banners, we exit early.

Also moves the logic for filtering out Categories with no visible
banners to the CategoryQuerySet, and hides these categories from the
statistics views.
It's a small thing, but when I read `Category.objects.has_visible_banners()` I expect a boolean. Perhaps `with_visible_banners` or `only_visible_banners` or `exclude_invisible_banners` would be better?