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`