Require Python 3 tests to pass in Django 1.7

South never really supported Python 3, but 0.8 was good enough to not
cause any immediately visible issues. South 1.0 now fails hard when
running Python 3.

This leaves us with the option to support both South 0.8 and 1.0. But as
we're just introducing Python 3 support and South is end-of-life anyway,
I've opted to require using Django 1.7 if running Python 3. This
combination is what new deployments will likely choose anyway.
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 fail when used in Python 2, but not
vice versa. Something with the field names being byte strings.

This rewrites the native migrations.