Using the config object more safely, fix bug in ModuleManager

Config properties are now accessible through functions, if you
choose to access the config in a safe way. A mistyped function
will throw an error, whereas properties will go unnoticed.

Once the config is loaded and any test properties are applied,
the object is froozen. This prevents misuse of the config as a
data store.

*