Fix issue with updating basket cookie in the middleware

Handle the case correctly where the basket cookie needs to be deleted
and updated in the same request. This can happen when unfreezing the 
basket. Django's response.delete_cookie doesn't remove the cookie from
request.COOKIES so we need to manually check this.
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
Adding missing packages to requirements_demo.txt
Added missing datatypes
Fixed offers fixture
previous failed with
'sites/demo/fixtures/offers.json': Cannot set values on a
ManyToManyField which specifies an intermediary model.  Use
offer.RangeProduct's Manager instead.
applies_to_tax_exclusive_prices  has been removed
Bring templatetags inline with earlier renames
commits:
a8a140fa94baa13f778f9a1529de8d5c2b75e3f2
6341b576bf9fa18c4dc1c78aaa88e174826763f6
Added DATACASH_CURRENCY="GBP" to the settings.py
needed by django-oscar-datacash
Extract method that applies the dashboard product list search query
Filter out products the the user isn't allowed to edit in one place

for all affected views. Also make it easy to customize or replace how
products are filtered for non-staff users.
Extract ordering the queryset into a method
Remove now unused method Product.is_user_a_partner_user
Don't hide base class get_queryset.

And get the model object name from the model attribute that
get_object_dict expects to exist anyway. Reason:

class OscarListView(generic.ListView):
    def get_queryset(self):
        ...

class CustomListView(BulkEditMixin, OscarListView):
    # calling get_queryset on this class would resolve to BulkEditMixin.
    # get_queryset and return None.
Retrieve objects from get_queryset instead of default manager.

This allows a customized installation to prevent objects from being shown
(by ListView) and edited (by BulkEditMixin) in just one place,
get_queryset().