Use assertEqual instead of assertEquals in test suite

The former throws a deprecation warning and causes the test suite to
fail.
Remove Python 2 requirements from requirements_demo.txt

They were added in 02a13da, but I can't find an explanation for why they
were added. AFAIK, the demo site builds fine without them. Oscar doesn't
depend on them directly, and any dependencies should pull them in
automatically. Furthermore, BeautifulSoup 3 is not compatible with
Python 3.
Test and handle text representations of models

This commit adds the python_2_unicode_compatible decorator to all models
that define a text representation. Furthermore, it adds a test to ensure
that we never forget to do that.

It is explained in details in the Django docs:
https://docs.djangoproject.com/en/dev/topics/python3/#str-and-unicode-methods
Python 3: Handle dict-like objects

Calls to items() and values() return an iterator in Python 3. This
commit converts the result to a list if necessary. In some instances,
using the six helpers was not necessary and has been removed.

See also:
https://docs.djangoproject.com/en/dev/topics/python3/#dict-and-dict-like-classes
Python 3: Review usage of range()

range was used correctly in the codebase. But I've removed a few
unnecessary calls to list(), and simplified a few trivial calls to
range.
Use Python 3 to create native migrations

Native migrations created with Python 2 differ from ones created with
Python 3. More importantly, they failed when used in Python 3, but not
vice versa. This is caused by field names being marked as byte strings
when using Python 2.

This rewrites the native migrations, which probably isn't a bad thing
either, because they were created with a pre-RC2 version of Django, and
Django 1.7 has since seen a few more migration-related fixes.

It's likely Django now does the correct thing and generates Python 2 and
3 compatible migrations under both versions of Python.
PEP8 fixes

This catches a call to unicode() and removes the unnecessary future
import for the print function.
Don't rely on message being present on Exception

e.message has been deprecated since Python 2.6, and doesn't exist in
Python 3. Unfortunately, there's
no good generic way to get an exceptions message; e.g. Django's
VariableDoesNotExist sets e.msg, whereas ValidationError does something
quite complex.
But we rarely use the exception message, and in those cases, a simple
cast to the text type is enough.
Merge branch 'mh/python3'

Conflicts:
	oscar/management/commands/oscar_fork_app.py