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. 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.
PEP8 fixes

This catches a call to unicode() and duplicate imports.