non-singleton Config class

This switches from using a singleton config implementation to a
memoized instance config implementation.  The behavior has not changed,
just the way it is accessed.  All config values are accessed via the
`Assert.config` config instance.

The main reason for doing this is that has no effect on the external
API but allows for much easier and robust testing of the configs and
their default values without impacting live code.  This also removes
the need to restrict any config settings for running the test suite.
The two concerns are properly separated.

To accomplish this, I have to now inject the config to everything that
needs it.  Most of the changes here are adding in the injection to
the object's API and updating the tests appropriately.