Enhance the logging subsystem.

This patch enhances the logging functionality in a few
ways, namely:

 0. Separate the request tracing from logging
 1. logging level is now user controllable
    a. user can specify custom logger, thereby controlling
       how+where (level+file) messages are logged to.
 2. tracing is individually controllable
    a.  user can specify custom trace logger, getting
        all the benefits as stated above.

This patch retains the old logging mechanism (via the
new log_<level> mechanism. The old mechanism, if used,
emits deprecation warnings to stderr.

Of course, logging unit tests have been changed to test
this new functionality.