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