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.
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
Fixing alignment of add to basket and add to wishlist buttons on product page, issue #1332
Fixing logout link right-align issue, issue #1332
Fixing order history form using too much vertical space, issue #1332
Changing layout of edit address form to not use as much vertical space, issue #1332
Adjusting layout of shipping address box. Initially tried to put edit btn in bottom right corner but conflicts with 'ship to address' btn on mobile, so have combined it with the delete btn in a button group. Issue #1332
Fixing dashboard order detail view layout issue with select checkboxes, issue #1332
Adding title text to product name links so the full title can be seen on link hover for a product. FED issue, #1332
Further adjustment to select/select all checkboxes in dashboard order listings, issue #1332
Fixing button focus FE state for btn-primary in dashboard, issue #1332