Only rewrite commit hashes, not arbitrary ones

At least my workflow never mentions non-commit hashes, and being more
specific can reduce the rate of false positives.
Add startup message
Refactor use of Try

Avoid throwing an exception to construct a Failure, construct it
directly.
Split process running out of canonicalizeHash
Add (unused) optional prettification of commits
Add Scalaz and prettify code with it

I know, this is not very pragmatic, but it's good practice.