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.
Remove code duplication in DSL implementation.
Enforce some method visibility.

Note sure whether everyone will agree on which ones, but some methods
should probably be for sublasses only, not end users. Hence the
protected section.
Clean class/instance method conventions.

Class methods (say `xxx` for validate, run and run!) are all a simple
shortcut for new(*args).xxx. That makes the interface/implementation
responsibility cleaner.
Clean instance interface.

* `execute` seems protected (not in README and bypass validations);
  For subclasses only.
* `execute!` is removed (not in README so probably not part of the
  public API). The bang was confusing here because of `run!` that
  throws an exception while `execute!` didn't. `run` is the natural
  replacement here and correspond to the similar class method.

In other words, we now have the following contract both on the class
and on the instances:

* `run` validates preconditions then executes the command if everything
  is fine. It returns an `Outcome` in all cases.
* `run!` validates preconditions the executes the command but raises a
  `ValidationException` is something goes wrong.
* `execute` is the non-robust (protected) version of `run`. It does not
  check the preconditions and does not exists on the class.
Merge pull request #3 from blambeau/master

Simplify Command