Ensure product class is available in template

Without this change, it's not available when creating a new product.
Prevent attribute validation for parent products

This is a messy situation caused by Oscar's product update view trying
to handle too many different scenarios.  This fix is quite hacky and not
entirely watertight - a better fix will arrive as part of #693 when the
catalogue dashboard gets rewritten to have separate views and forms for
group and standalong products.

The core problem comes from trying to validate required attributes.
When you are creating a parent product that belongs to a product class
with required attributes, you don't want to enforce that the attributes
are set (eg the parent doesn't have a size).  Before this change, the
dashboard would not allow a parent product to be saved if it didn't have
the product class attributes set.

Hence we need to change the validation rules when the form is submitted,
but it actually impossible to tell exactly if the submitted data is
for a new group product or a standalone product with no stockrecord.  To
address this, a new is_group field has been added to the form to
allow the validation rules to be altered when entering a new group
product.  Also, the product's save method allows a new kwarg that
disables attribute validation - this is required when saving a parent
product.
Adjust product update template

- Ensure variant overview shows attributes
- Use form field partial where appropriate
Updates setup.py to allow django 1.6.x
Incompatability with Django 1.6, commit_on_success and sqlite3

Changes to the transaction handling in Django 1.6 resulted in
the ``commit_on_success`` decorating failing with SQLite3.

The `atomic` decorating is used instead when available.
Don't render blank table in categories dashboard
Improve catalogue admin for options
Add fixture for creating a variant product

And load it for the sandbox by default.
Extend strategy class to work with variant products

The strategy API has gained a new method: fetch_for_group, which is for
fetching stock information about a group/parent/abstract product.  Like
the existing fetch method, this is highly customisable.

For a group product, we fetch all relevant variants and stockrecords; we
then pass these to the methods that determine availability and pricing.

The pricing display logic for a group product has been simplified a bit.
We now just look at the first stockrecord and use that price - we no
longer say "From £X".  This seems to be a more common pattern in the
wild and allows the templates to be simplfied as they no longer need to
handle group and standalone products separately.
Ensure that only available variants are in basket dropdown
Use a custom widget to show unavailable variants in dropdown

We define a custom select widget which allows certain choices to be
marked as disabled.  We use this to include unavailable variants in the
add-to-basket dropdown.
Correct variant fixture loading in makefile
Add template block for easier customization
Permission-based dashboard: Don't mask ImportError

get_classes hides ImportErrors that are part of it's discovery strategy.
Only ImportErrors that are thrown when an app exists are raised by
get_classes. Those are the ones that previously were masked by
_default_access_fn's blanket exception. Now we don't catch ImportErrors,
so they should propagate properly and give a meaningful stacktrace.
Use context manager for catching warnings in runtests.py

I could never reproduce the DeprecationWarning thrown by Travis, e.g. in
https://travis-ci.org/tangentlabs/django-oscar/jobs/15324179
As far as I understand the warnings module, the previous code to
escalate DeprecationWarnings to exceptions should have had no effect.

With these changes, DeprecationWarnings get thrown correctly *if* used
in a single-threaded environment; both locally and on Travis.
Explicitly exclude DeprecationWarning triggered by sorl-thumbnail

It's triggered when used with Django 1.6. But as it's outside of our
control, we ignore it. It's already fixed in their master branch, so we
should update to the newest version once released.
Merge pull request #1072 from tangentlabs/fix/setup_for_django_1_6

* Updates warnings handling
* Updates transaction handling with SQLite
* Updates Django version range in setup.py
Stop using home-rolled encryption for basket cookies

For anon users, the basket ID is stored in a cookie.  Previously, this
was stored with a simple crc32 hash to prevent users enumerating baskets
by changing their cookies.  However, home-rolled encryption is always a
bad idea.  In this case, it may have probably exposed too much
information allowing the SECRET_KEY to be determined.

This change switches away from the home-rolled encryption to use
Django's built-in crypto signing functionality to store the basket ID.

Thanks to Raphael Kimmig for reporting this issue and providing this
patch.
Merge remote-tracking branch 'upstream/master'
Merge branch 'issue/692/parent-products'

Conflicts:
	oscar/apps/dashboard/catalogue/forms.py