Refactor Chain::DSL for use with instances of itself
Rename Chain::Definition#{merge => prepend}
Don't use class << self inside Chain::DSL::Builder

* Use #module_eval instead of #class_eval
Adjust flay score
Fix docs for Chain::DSL{::Builder} and Environment
Simplify Environment.build
Fix docs for Environment#registry
Adjust reek config
Implement Chain::DSL::Builder with instance methods
Perform instance_eval in Chain::DSL#__call__
Simplify Chain::DSL::Builder some more
Only expose Chain::DSL::Builder#dsl to the public
Avoid unneeded block param destructuring
Make Chain::DSL#use private (at least for now)

Currently I can't imagine ever using #use directly
myself. Maybe once someone makes strong cases for
that, we can reconsider.
Introduce Chain::DSL::Config{::Builder}

* Moved and refactored Chain::DSL::Builder into
  Chain::DSL::Config::Builder
[ci skip] Clarify docs for Chain::DSL#initialize
Extract Chain::{DSL::Builder => ModuleBuilder}
Extract private Environment#merged_registry
Adjust reek config
Fix unit specs and kill all mutations