Improved App component:
- use Config instance instead of static calls
- app initialization split into few methods
- app now requires main application config file on construction
- app services initialization moved into init() method, which is called automatically on run() and also can be called manually
- app config is now accessible from outside of app with getConfig() methods, thus various app initialization parameters can be changed before its run/init