Keep track of why modules are provided/requested/rejected/etc.
The module system should track why modules are enabled, provided, rejected, etc. for use in error messages. Currently this information is visible through debug flags and logging, but the error messages are a bit lost as to the actual reasons behind things.
Cc: @cory.quammen