Return a more useful error if config file is missing

Don't exit the process, its just not a nice thing for a library to do. Return an error instead. Supports the case where all values can be derived from defaults. Related to #1.