More consistent matches behaviour

Fixes cases brought up in https://github.com/jashkenas/underscore/issues/1683 including:

- **only using own properties of spec object**
- ensuring the keys being checked exist on the given object so `_.matches({x: undefined})({}) === false`

Fixes #1683
Wouldn't `protospec({}), true, ...` be more appropriate for what you're trying to test? Also, shouldn't we add tests that the second operand's prototype properties *are* taken into account? Let's try to make the message more descriptive or add a comment.