Record the source of configuration directives in the source-registry config
The source registry configuration is described by a bunch of forms in a DSL that allows for inheritance. Before constructing the actual source registry (mapping from primary system names to pathnames), the configuration DSL is expanded into a list of directories to search and flattened. Previously, the flattening process left no indication of *why* a particular directory was being searched. We now record that information as a list of locations, ordered from most specific to least specific. This list can contain any of the following: + A symbol: The directive was generated by calling the symbol as a function with zero arguments. + A directory pathname: The directive came from one of the files located in this directory ending with .conf. + A file pathname: The directive came from the named file. + NIL: The directive came from a literal NIL (simplifies to just an inherit directive). + :INHERIT: The directive resulted from inheriting configuration. So a source list such as: (#P"/home/USER/.config/common-lisp/source-registry.conf.d/" USER-SOURCE-REGISTRY-DIRECTORY :INHERIT USER-SOURCE-REGISTRY :INHERIT ENVIRONMENT-SOURCE-REGISTRY :INHERIT NIL :INHERIT WRAPPING-SOURCE-REGISTRY) Should be interpretted as: The specified search directory is being searched because it was named in one of the files /home/USER/.config/common-lisp/source-registry.conf.d/*.conf, which was searched as part of the user's source registry directory, which was included because the user's source registry conf file was empty or included a :inherit-configuration directive, which was included because CL_SOURCE_REGISTRY was parsed to something that contained a :inherit-configuration directive, which was included because the user did not manually specify a configuration to use, which was then included by the wrappign source registry which can never be overridden.