Allow custom comparison methods, with a few optional built-in filters

As discussed in #3, here is instead an implementation that allows for custom comparison methods, but also with the option to use a few built-in filters.

I've also cleaned up even more documentation, and added a new `:strict` option to allow for looser comparison of numeric types (since 4 == 4.0, but HashDiff currently says they are not equal because their classes do not match).  By default `:strict` is `true`, to retain previous behavior and not break current implementations, but if set to `false`, then Float, Fixnum, and BigDecimal can actually be compared.