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.
be simpler without the `Q` objects to just use `exclude`? This works, but I'd think it would have been easier to use e.g. `self.exclude(imagebanner__visible=False, textbanner__visible=False, firefoxupgradebanner__visible=False)`. Some reason I'm missing that you can't do that?