The array of errors should be easier to process 

Each item in the list of errors has a parseable path to the object, and the error string:

```coffee
errors = jsm.validate object, schema
errors.should.eql [
  { path: 'machines[0].name', error: 'required' }
  { path: 'machines[3].ip', error: '123 is not a valid IP address' }
]
```

*note:* matchers don't need access to the path anymore:

```coffee
matchers['foo'] = (val, options) ->
   "#{val} is not a valid foo with #{options.bar}"
```