A "pull" API like this one, where code just reaches in as it feels the need to grab certain values, is problematic because it means that when a value isn't present, there's no sensible way to report the error.  By the time something is calling `config_value("port")`, you no longer know where the configuration file was, or who failed to specify the port.  Is it the command-line's responsibility?  The configuration file?