Previously engines were defined in modules, which where then
stapled with logger, supported_languages & language_aliases
via monkey patching in searx/engines/__init__.py.
Monkey patching is obviously a bad practice since it confuses
humans as well as static type checkers. But there were more problems:
* there were no type hints for the method input and output types
* the request method did not even make a clear distinction between input
and output (abusing a single "params" dictionary for both)
This commit introduces a new class-based architecture for engines,
in a backwards-compatiable manner: allowing old-style module engines
to be used along witn new-style class-based engines.