Handle unicode/str cast operators.

A few of our objects defined __str__ and/or __unicode__ methods. This presents
some complications for porting to python 3, since str has different meanings.

Django provides a decorator, @python_2_unicode_compatible, whereby you define
__str__ using python 3 semantics (i.e. it returns unicode), and when running
with python 2, it will rename that to __unicode__ and make __str__ call that
and encode to utf-8.

Testing done:
* Ran unit tests
* Checked list displays in the admin

Reviewed at https://reviews.reviewboard.org/r/4920/