I find this a bit confusing. How about splitting the core that loads from a file out into a class method (e.g. `Configuration.from_file`) and have the constructor just accept a hash?

Is the reduce thing just to normalise hash keys that could be symbols into strings? Could you use an intermediate variable to make that easier to understand?