Root package now contains only initialization code and 'dummy' module.
Each module now got its own package. Module packages are grouped by
their main purpose (storage/, target/, auth/, etc). Shared code is
placed in these "group" packages.
Parser for module references in config is moved into config/module.
Code shared by tests (mock modules, etc) is placed in testutils.
This allows more readable configuration files without additional
explanations in cases where a single module is used for multiple
purposes.
Also cleans up certain problems with modules that rely on block
names having certain semantics (e.g. endpoint modules).
This allows modules to reference each other during initialization
independently of configuration blocks order.
Also this allows us to initialize default modules in a more clean way.
All configuration directives now use underscores instead of dashes for
consistency with Caddy conventions.
Disallow defining multiple module instances with implicit name.
Remove global module.WaitGroup and add as field where it is necessary
(endpoint modules).
buf.Reset() and use rewind Reader in SMTP pipeline.
Rename several entities in code (NewModule => FuncNewModule, CfgTreeNode
=> Node, etc).
Also fix several warnings from linters.