Added logging at critical points throughout the nject code base

targeting areas used to resolve a dependency tree.  In the process
identified a few areas that moderately changed the interface:

1.  The return values for function was made consistent.  Mostly the
tree is returned for chainability, and where it wasn't before it does
now.

2.  Before falsy values (false, 0, null, '', undefined) could not be
added as constants because during resolution the check against the
constant's value was used to determine async processing, but, of
course, these constant's are falsy, and so not processed correctly,
and so isConstant was introduced in the internal registration.

3.  Logging is quite ubiquitous now.  There are places where less
logging could be done, but instead of rearranging code to require less
logging the old code was used, and verbose logging added.

4.  In this pass the code wasn't greatly broken appart or refactored
to not resemble the original.  Instead, the goal was to isolate
function dependencies, which means to remove closures from places
where they had access to data they didn't need.  In this way these
functions could be further refactored to eliminate uneeded state.

All of this is to figure out where dependency resolution is/was/will
fail in the future, and then quickly resolve those issues.