Message equality testing is class-aware

Fixes #51 .

Breaking duck-typing and checking the message class is justified in this case: aside from the obvious case where comparing a message to a class that doesn't respond to `[]` raises an exception, some messages are supersets of others, and the existing code didn't handle that case gracefully.