extract failure messages into separate methods

Previously formatting early could lead to race conditions as it formatted the
object under test.

(This also makes the interface a bit clearer.)

Signed-off-by: Ted Young <tyoung@pivotallabs.com>