* fix init misuse which makes running tests impossible since tests are run inside a temporary test directory which breaks env loading
* use dependency injection pattern for server creation and global server context in route handlers
I have put too much code into the same files.
Also, I put everything into the same package: main.
This package is only meant for executables.
Therefore, I have refactored my code to use multiple packages. These packages also guarantee separation of concerns since Golang doesn't allow cyclic imports.