text: Title: Indent debug output
  Body: #### The problem
  
  The `factory.debug` context manager is fantastic, but it's still hard to tell which declaration caused each line of output.
  
  #### Proposed solution
  
  I think the simplest thing that would help is illustrated by the documentation for `factory.debug`, which adds "artificial indentation" to the output. It looks to me like `len(step.chain())` should compute a reasonable nesting depth, and the various calls to `logger.debug` could add whitespace proportional to the nesting depth, or something.
  
  I think it would be even nicer if the log messages could report the class name and field name which is currently being constructed. That looks complicated though, because I don't see that the declarations' `evaluate` methods have any way to get that information currently.