Moved tests for render shortcuts to their own app.
Avoided rewrapping Contexts in render_to_response.

This change preserves backwards-compatibility for a very common misuse
of render_to_response which even occurred in the official documentation.

It fixes that misuse wherever it happened in the code base and docs.

Context.__init__ is documented as accepting a dict and nothing else.
Since Context is dict-like, Context(Context({})) could work to some
extent. However, things get complicated with RequestContext and that
gets in the way of refactoring the template engine. This is the real
rationale for this change.
Silenced a flake8 warning.

../tests/shortcuts/views.py:45:1: E302 expected 2 blank lines, found 1
Fix another flake8 warning.

I don't agree with flake8 here about the right indentation, but as long as
we're using it, we should stick to it. I don't want to disable its hanging
indent checks just because of this case.
Fixed #23892 -- Made deconstructible classes forwards compatible
Revert "Fixed #23892 -- Made deconstructible classes forwards compatible"

This reverts commit f36151ed169813f2873e13ca9de616cfa4095321.

Adding kwargs to deconstructed objects does not achieve useful
forward-compatibility in general, since additional arguments are silently
dropped rather than having their intended effect. In fact, it can make the
failure more difficult to diagnose. Thanks Shai Berger for discussion.
Deprecated dirs argument to override TEMPLATE_DIRS.

Cancels 2f0566fa. Refs #4278.
Introduced a template engine class.

Moved Django templates loading infrastructure there.
Removed unused API get_template_loaders.

It was introduced in a recent refactoring so this isn't an issue.

Then renamed _get_template_loaders to get_template_loaders.
Moved template loaders management in Engine.

Passed the engine instance to loaders. This is a prerequisite for
looking up configuration on the engine instance instead of global
settings.

This is backwards incompatible for custom template loaders that override
__init__. However the documentation doesn't talk about __init__ and the
way to pass arguments to custom template loaders isn't specified. I'm
considering it a private API.
Removed dependency of template loaders on Django settings.
Added to each Context a reference to the Engine.

It's only available during the rendering.
Move compile_string into the Engine class.
Moved make_origin into the Engine class.
Encapsulated ALLOWED_INCLUDE_ROOTS in Engine.
Encapsulated TEMPLATE_CONTEXT_PROCESSORS in Engine.

Since RequestContext doesn't know its Engine until it's passed to
Template.render() -- and cannot without breaking a widely used public
API -- an elaborate hack is required to apply context processors.
Encapsulated TEMPLATE_STRING_IF_INVALID in Engine.
Encapsulated TEMPLATE_DEBUG in Engine.
Removed direct references to template-related settings.
Fixed #23900 -- Added missing imports in code example.

The Preventing header injection example included
classes that are not imported.

Thanks to Collin Anderson and Berker Peksağ for the
reviews.