Add new Django and Python compatibility functions.

Review Request #10251 — Created Oct. 21, 2018 and submitted — Latest diff uploaded

Information

Djblets
release-2.0.x
570294a...

Reviewers

The new djblets.util.compat.django.shortcuts module features a
version of render() that works with older and newer versions of
Django. Any existing calls to render() or render_to_response()
should be updated to use this.

The new djblets.util.compat.django.utils.functional provides a
backport of SimpleLazyObject, which supports more special functions
like __iter__, __contains__, and more. This is a drop-in replacement
for Django's SimpleLazyObject.

The new djblets.util.compat.python.past is intended to provide
re-implementations of old useful capabilities that have been removed
from Python 3.x. For now, it provides cmp, which Python 3 has removed
in favor of a hard-to-remember comparison expression. For readability,
consistency, and easier development, our version can be used in place of
that expression.

Made use of this in some pending code. These worked on Python 2.7,
3.5, and 3.6.