Configuration class get_logger_name() method

In order to greater flexibility in how configuration classes
organize their logger objects, refactored the
mandrel.config.core.Configuration.get_logger() method to rely upon
a new mandrel.config.core.Configuration.get_logger_name() method
for determining the logger name.

The net logic for name organization is the same as before, but a
subclass can override `get_logger_name(name=None)` to customize the
naming conventions without losing the actual logger retrieval.
Config class logger name helper functions.

A variety of new functions that can be used as for
`get_logger_name` in a (Forgiving)Configuration subclass, which
make it easier to enforce different logger name conventions.

All in mandrel.config.helpers:
* named_logger(name) - Use `name` as the base instead of
  `cls.NAME`.
* templated_name_logger(template) - Use printf template with
  `cls.NAME` to determine the base.
* name_chain_logger(chain) - Use `cls.NAME` and optional name
  as params to `chain.get_logger_name` to determine names; sets up
  naming hierarchies without requiring inheritance hierarchies.
* hierarchical_logger(base) - Assemble base name by applying each
  `cls.NAME` in the inheritance hierarchy up to (and including)
  `base`.  Sets up naming hierarchies that flow through the inheritance
  graph.
Merge branch 'configurable_logging'