sources: register sources at config-time

This provides an api for registering sources.  It uses the `Source`
class for handling and the master source list is the combination
of all the source's files.

This list is used when looking up sources by digest path.  The _last_
source file with a matching digest path is selected (in the case of
multiple source files having the same digest path).

This API allows 3rd-party tools to register their own sources for
digesting and serving with Dassets.