avoid custom model methods in data migration

The data migration for product ratings does not work correctly
with South 8 (and earlier) due to reliance on methods that are
not included in the frozen model. This behavior was introduced
in #773, which was a step in the right direction, but which fails
when run against a non-empty product catalogue.

This migration mimics the logic of Product.calculate_rating, adding
the frozen models from the reviews app and friends, and avoiding
any custom methods or joins. It also uses a hard-coded value in
place of ProductReview.APPROVED, for better or worse.
Remove deprecated methods from catalogue models and views
Remove deprecated partner methods

This completes the move away from partner wrappers to strategies. All
the methods for determining price and availability information have now
been removed from the partner classes.

The helper policy class ("DelegateToStockRecord") have been removed too
as they no longer have methods to call on the stockrecord.
Excise partner wrapper functionality
Merge pull request #1336 from flashnotes/issue/remove_custom_methods_from_data_migration

avoid custom model methods in data migration
Add unique_together constraints to ManyToMany through models

Oscar uses explicit through-models for some ManyToMany relationships.
The expectation is that for each combinatination of the two foreign
keys, only one model can exist. But this hasn't been enforced until now.

Fixes #1309.
Don't assume AuthenticationMiddleware in context processor

@alex-moon saw some issue where Django would head for the 500 handler
and request.user wasn't set.

This is the more descriptive and pythonic version of his fix.

Fixes #1338.
Fixes #1339
Add defaults for slug handling settings

Seems like a good practice to define them explicitly.

Cherry-picked from d755aae.
urlquote paths when checking if correct URL was used

Otherwise the check fails when using unicode slugs.

Cherry-picked from 801464d.

Conflicts:
	oscar/apps/catalogue/views.py
Use unicode strings in test suite

This is a proposed change to show different styles of how we could
introduce unicode strings into the test suite. We should probably settle
on one of them.

Cherry-picked from 1e14af9

Conflicts:
	tests/unit/address/factories.py
	tests/unit/address/model_tests.py
Replace deprecated permalink decorator

Django now recommends using reverse():
https://docs.djangoproject.com/en/dev/ref/models/instances/#the-permalink-decorator

Cherry-picked from 327fdc1
OSCAR_SLUG_FUNCTION: Support string notation to set slugifier

Importing things in settings is discouraged. But until now,
OSCAR_SLUG_FUNCTION could only be set as a callable, which requires
importing. It's now been updated to use the import_string function.
Bump several dependencies for Python 3 compatibility

Debug toolbar 1.2 has some more usable panels, and less trouble with
jQuery interactions. It also is the first version to be compatible with
Django 1.7, which we'll support in the upcoming Oscar release.

django-compressor 1.4 has finally been released and supports Python 3
and comes with lots of other goodies.

sorl-thumbnail seems to be barely maintained anymore. I don't dare
switch to the beta version for Python 2. There's a few critical issues
reported on their issue tracker atm:
https://github.com/mariocesar/sorl-thumbnail/issues?labels=critical&page=1&state=open

django-nose-querycount is not Python 3 compatible and has been moved.
Test against newest Django versions

Django 1.5.8 and Django 1.6.5 have since been released.
Replace compat.urlparse with six.moves.urlparse.parse

six is presumably better tested than our own code. Plus it allows us
using both urlencode and urlparse.
More concise pattern to exclude external DeprecationWarnings in tests

I was seeing a lot of DeprecationWarnings. As all we really care about
is DeprecationWarnings in Oscar, a more blanket statement should be
sufficient.
Python 3 fix for filter()

I presume filter returns an iterator in Python 3.
Fixes for reverse_lazy and Python 3

Django has some issues with reverse_lazy, e.g.
https://code.djangoproject.com/ticket/19378

This made me review where we use it, and change it to reverse where it's
unneeded.

One method also triggered the same error message as above. Luckily the
entire method is unnecessary, as FormView already does the correct
thing.