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.