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
Good points, improved these two cases in https://github.com/megawac/underscore/commit/10f8bf06f3772262119ab30f69df8393cf8e7205