improve how we generate failure message

this improves two things:

1. it makes it easier to switch between different views without
   changing the ancestors as in bacon. manipulating modules is
   actually not a good idea. it's a kind of destructive operation
   since there's no way to revert it.

2. we also avoid generating the failure message if we don't have any
   failure anyway. this should probably improve some of the performance,
   as generating the failure message could be expensive (e.g. calling
   external diff)
sort hash in order to find difference between hashes easier
newline between each args
try to be shorter
ditto
sort of cheating... but anyway
auto diff and auto newline