Ensure that reverse returns a str object and add reverse_lazy.

Certain parts of Django assume that URLs are str objects (as URLs are
ASCII-only) and break if given a unicode object. In many cases reverse
will return a unicode object because it builds URLs using 
`request.META['SCRIPT_NAME']`, which is a unicode string.

To handle this and any other situation involving unicode in a URL, we 
should use Django's `iri_to_uri` function to escape all unicode in the URL 
and return a str object.

Also adds reverse_lazy, which makes using reverse in decorators and 
settings files easier.