Ensure offers consider parent categories for child products

A variant (child) product should not have categories. We need a new method
to get product categories, either for a product or for a parent product
if the parent is set.

This wrapper method is used when testing if product belongs to a range by
category.

Fixes #1218.
Remove several quirks related to offer ranges

* Removed unused _save method. It's not called anywhere.
* Simplified comment and logic for display_order
* Reordered imports
* Used items() instead of six.iteritems() because create_range does not
  get complex kwargs
* Removed a duplicate test
* Test for the correct exception
create_range method doesn't ignore existing ranges again

The functionality to have it fetch an existing range instead of loudly
complaining when a range already exists has been added as part of #1053.
But @codeinthehole and I agree that a method called create_range
shouldn't silently ignore an existing range, and can't think of a use
case anymore.
Update handling of child product for product ranges

This commit addresses issue #1253.

Currently, the offers app doesn't really consider child products;
behaviour is undefined. This commit addresses the fact: for now, we
assume that child and parent products are tightly coupled, and forbid
child products in a range. You can only add the parent product (and
with it all children).

This requirement might be lifted in the future, but that will mean
additional complexity and we will see if it's necessary.

Closes #1253.