Simplify Command#initialize

The main incompatibility is that @original_hash is no longer the same
object as the first argument. That sounds actually safer IMO as it is
definitely part of the internal implementation and should not be
changed from the outside. I would even be tempted to freeze it.
Introduce Command#has_errors? and clean related logic.
Simplify Command#add_error

A bit more fuctional-ish, so probably easier to split as sub-problems
and sub-methods and then to unit test eventually.
Encapsulate Outcome creation & logic.

The idea here is to keep all Outcome creation and logic in only one
place, namely #validation_outcome. It requires a new parameter, which
is odd because that parameter `r` makes no sense on the public interface.
I'll try to fix this later.