use diff output in `assert_same` assertion fail messages

Much like `assert_equal` assertion fail messages, this adds diff
output where appropriate to `assert_same` assertion fail messages.

This also cleans up the fail messages to have them use a standard
format/structure ("{act} (not) expected to be the same as {exp}")
and to use "inspect-style" object identifiers instead of just a
raw object id.

All this is to enrich the fail messages and to help developers
recognize the differences between expected and actual values.

Closes #160.

@jcredding ready for review.