Upgrade scandal to handle file read errors

Right now, if find-and-replace / scandal encounters a bogus or unreadable file, it just doesnt finish. No good. This bubbles errors up from the new scandal to the consumer of the `project.scan` and `project.replace`.

I need help testing this. Testing the replace is easy as we pass in a list of paths, so I can just pass a bogus path in there. Testing `project.scan` is harder because it wont try to open any files that dont exist, and I dont know how to reliably (across machines) get it to scan a file the test user cant access. If you have ideas, let me know.

See atom/scandal#15 and atom/find-and-replace#243

Fixes atom/find-and-replace#192
Fixes atom/find-and-replace#197
Fixes atom/find-and-replace#242
What is the reason to not just re-emit `e` directly here? If there is a reason, might be nicer to just make this:

```coffee
replacer.on 'file-error', ({code, path, message}) ->
  emit('replace:file-error', {code, path, message})
```