Create ConfigInterface, standardize Config, refs #369

- Create a ConfigInterface to decrease code coupling
- Changes type hints to use the interface
- Makes `fromYaml` consistent with `fromPHP` and `fromJSON`, throwing a `RuntimeException` if the config does not return an array
- Corrects some other minor issues
late static binding support, for overloaded classes.