Right now the code looks weird because the defaults
of a pipe are far away of the implementation of the pipe.
the intend of this PR is to bring them closer by having a
Defaulter interface.
I also renamed the Pipe interface to Piper, and removed
the Description method in favor for fmt.Stringer.