better unicode support in assert_equal

Alternative fix for #144.

The idea is to get everything represented as characters. Calculate your diff and format your message, then encode to UTF-8, since apparently python2 requires bytes for exceptions.

The _to_characters function is quite long, but it covers all the insane edge cases that I've encountered in my travels at Yelp.

The new tests assert that the generated error messages are quite readable.