[#84537006] use more specific message
[#84537006] added NotFoundError
[#84537006] refactored to use PGit::Configuration::NotFoundError
[#84537006] added ProjectMissingError, LayoutError, Error
[#84537006] ProjectMissingError takes the path to the configuration as
an argument
[#84537006] removed sanity check test
[#84537006] Used the extracted ProjectMissingError
[#84537006] rename LayoutError#general_message to
Layout#prepend_general_message

- also cleaned up the implementation
[#84537006] extracted PGit::Configuration::LayoutError to its own file
[#84537006] extracted out PGit::Configuration::MissingAttributesError

- extracted from PGit::Configuration
[#84537006] made sure that NotFoundError's config_path is an argument

- We might make config_path an argument to the app, so this makes it
  easy to catch errors for when that time happens.
[#84543682] extract configuration validator

- so that configuration is not too concerned about validation.