Config Schemas

After this pull request every plugin can define required config variables, like so:

```javascript
{
  config: {
    // config key required by this plugin
    'SECRET': {
       // default value for the config key
       default: function(){ ... return secret},
       // name of environment variable for this key
       env: 'SECRET'
    },
    'COMPOUND.KEY': { /**same as above **/}
  }
}
```
This scheme will be used to parse config object, `COMPOUND.KEY` means the same as  `{COMPOUND:{KEY:"value"}}` and is used to define a scheme for the nested config properties