Matches keeps an internal reference to spec object

Fixes #1729
How common is `obj === attrs` really? I assume not so very common so seems like an extraneous check.