Allow matching of object attributes with a hash matching

The library already supports matching structs using the same arguments of the constructor. I propose a more general object matching using the same syntax already used to match hashes, but instead of keys we would match attribute readers.

With this patch applied, this snippet works:

```
require 'pattern-match'

class Person < Struct.new(:name, :age)
  include PatternMatch::ObjectHashMatcher
end

match Person.new("John", 21) do
  with Person.(:name, :age => 21) do
    puts("name: #{name}")
  end
end
```

I am unsure what's the best way to implement this and how to make it compatible with what we have in Struct. Any suggestions to improve the patch most welcome.

(BTW, great library, I've been looking for a pattern-matching library in Ruby for a long time and yours is incredibly powerful).