Explicitly distinguish between standalone/parent/child products

Previously, the product "structure" has been determined implicitly. That
means that the decision if a product is a parent product or (what used
to be called) a variant product was made by looking at it's parent
field. This makes it harder to reason about it in edge cases, especially
when creating a parent product before creating child products.

This commit introduces a field to be able to explicitly set the intended
product structure. It also starts down the path of consistently naming
products either stand-alone, parent or child product.

Previous names for those products existed, but they have slight issues:
* "Canonical" will be an unknown word too many non-native English
  speakers. It also reminds of the makers of Ubuntu.
* "Group product" does not express that there's a hierarchy
  between parent and child products, and it's not clear to which level
  a group product belongs.
* "variant product" in itself is fine, but expressing the hierarchy by
  using "parent" and "child" is preferrable.
Introduce properties to use new product structure field

These are short-cuts to reason about a product's structure.
Deprecate old product properties

They use the old, implicit way of reasoning about products, and don't
confirm to the new naming scheme.
Update and broaden product validation

The clean method now uses the new API.

A docstring indicated that parent products can't have
stockrecords. Added a check for that.

Also added a check that child products must have a parent.
Use explicit product structure in ProductForm

This commit makes the changes in 4f709cd58 slightly less hackish, as we
now have an explicit field to use to reason about the product's
structure. Nonetheless, we still inspect raw POST data to decide if the
attribute fields are marked as required or not.
Update codebase to new API

Those are mostly cosmetic changes.
Get tests to pass (excluding DeprecationWarnings)

I'd like to move away from django_dynamic_fixture, factory_boy is so
much nicer.
Update strategy interface to new naming

This breaks more backwards-compatibility, but is an unfortunate
necessity to be consistent with the new naming.
Fully migrate codebase to new API

Tests now pass and no deprecation warnings are thrown. Beautiful.
Fix a small typo
Merge pull request #1381 from monokrome/patch-1

Fix a small typo
Turn AbstractAddress.search_text into a TextField

@hkage raised a good point in #1384
that concatenating the address lines might lead to
a string that's longer than the set limit of 1000 characters. If I
recall correctly, a CharField limit much higher than 255 characters is
troublesome with some databases anyway, so I've taken the opportunity to
turn it into a TextField instead.

Fixes #1384.
Fixes #1385.
Dashboard search: Fallback to __icontains search for UPC

On Bike Parts Market, UPCs are structured in a way that allows grouping
of products by UPC. In that case, an icontains search on UPC becomes
useful.

This commit introduces a change that if the UPC exacht search doesn't
match, it falls back to an icontains search, potentially showing more
than one match. This mirrors what the title search does already.
Refactor product attribute tests

They were in a bit of state, and are now using factories. Still far from
ideal, but I'd rather not change them too much while refactoring
attributes at the same time.
Refactor product attribute validation

* The get_validator method was dropped. Elsewhere we use the explicit
  lookup by type, so why not there? It only makes adding custom
  validation for e.g. richt text values more verbose, as both adding a
  validation method and overriding get_validator is needed.
  get_validator() was not used elsewhere in the codebase.
* The unused is_value_valid (used for option values) has been dropped.
  The same check is already done in _validate_option.
Altering layout of Checkout shipping address page to horizontal, issue #1332
Fixing order detail page order notes tab issue under save note button, issue #1332. Note that this fix is more of a bandaid than a proper fix - this CSS is a bit weird but I'm hesitant to change it too dramatically in case it breaks elsewhere
Rebuild product attribute entities

Product attributes had a mechanism to point at related model instances
in a generic way, but nobody managed to understand or get it working.
This comment removes that logic, including the AttributeEntity and
AttributeEntityType models.

Instead, this commit models the relation via a generic foreign key on
ProductAttributeValue.

I don't think there's a good default behaviour for the entity selection
as presumably each deployment will want to limit the selection in some
way. Therefore, there's currently no frontend support for it.

variants.json has been rebuilt by executing the migration and dumping
the correct data afterwards. That explains the other changes in it, as
usually we'd just use vim line matching to shape it into a form that
lets us build the sandbox.
Update demo site fixtures

I forgot to update the demo site fixtures, which caused Travis to fail.
Thank you Travis.
Fixing alignment of add to basket and add to wishlist buttons on product page, issue #1332