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

+ :INHERIT: The directive resulted from inheriting configuration.

So a source list such as:

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
7 jobs for !156 with record-source-of-source-registry-config in 35 minutes and 53 seconds (queued for 1 second)
latest merge request