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.
Actually I just tested this and exclude does not actually exclude the right banners. Turns out the SQL for using `exclude` is:

```sql
SELECT `banners_category`.`id`, `banners_category`.`name`, `banners_category`.`parent_id`, `banners_category`.`link_clicks`, `banners_category`.`firefox_downloads`, `banners_category`.`firefox_os_referrals`, `banners_category`.`lft`, `banners_category`.`rght`, `banners_category`.`tree_id`, `banners_category`.`level` FROM `banners_category` WHERE NOT ((`banners_category`.`id` IN (SELECT U1.`category_id` FROM `banners_firefoxupgradebanner` U1 WHERE (U1.`visible` = False  AND U1.`category_id` IS NOT NULL)) AND `banners_category`.`id` IS NOT NULL) AND (`banners_category`.`id` IN (SELECT U1.`category_id` FROM `banners_textbanner` U1 WHERE (U1.`visible` = False  AND U1.`category_id` IS NOT NULL)) AND `banners_category`.`id` IS NOT NULL) AND (`banners_category`.`id` IN (SELECT U1.`category_id` FROM `banners_imagebanner` U1 WHERE (U1.`visible` = False  AND U1.`category_id` IS NOT NULL)) AND `banners_category`.`id` IS NOT NULL))'
```

Which roughly says "Find all category ids for invisible banners for each type, and make sure this category's id is not in all three lists." Problem is, a category with no banners at all passes this test because it's not in the list of category ids for any banners.

Essentially, `exclude` removes categories that have invisible banners in all three categories, but we're trying to exclude categories that don't have any visible banners at all, which is distinctly different.