Sync devtools
Extract Chain::Definition from Chain::DSL

While flay score bumped quite a bit, this change
definitely splits responsibilities better than
before. Previously, Chain::DSL was responsible
for collecting processors to use for a chain +and+
making sure that the internal array of processors
was correctly mutated. The internal processors
array got promoted to a dedicated object, therefore
Chain::DSL is left to do what it's supposed to,
collecting processors while delegating the mutation
of the internal processors to Chain::Definition