Add the concept of a ProviderSet.

ProviderSet is intended as a more convenient way to modularize sets of
providers that are related in some way, as well as to encourage exposing
providers as functions that can be unit tested, rather than burying them
as local lambdas, etc.
Merge branch 'master' into docs
Complete the DI tutorial, referencing the new ProviderSet class.