mv try catch out of main function

Moved `try-catch` to another function to improve speed.
Callback called twice when error occur:
- with first argument `error`
- with first argument `undefined`

[Optimization killers](https://github.com/petkaantonov/bluebird/wiki/Optimization-killers)
`.replace(/^\ufeff/g, '')` should not be removed. Why I added [this commit](https://github.com/azer/read-json/commit/638f07205c87b6497490ab280361ddf373d7eff6) is that `fs.readFile` doesn't strip UTF-8 BOM by default (joyent/node#1918).

Run this code on REPL to confirm it.

```js
JSON.parse('\ufeff{"foo": 1}');
```