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 API but
allows for much easier and robust testing of the configs and their
default values without impacting live code.