Create less IO errors to improve efficiency of require (forwardport of #8189)

In some environment (especially when coffescript is involved) module.js
will spend a lot of time looking up nonexisting files. This is caused by the
lengthy error creation. Those errors are then immediately caught.

This change makes the lookup much faster, by avoiding the unnecessary error
creation.

module::statPath now uses the new second parameter of fs.statSync function of the
fs.js. There is a similar change for the fs.stat, adding the third parameter.

This is the forwardport of https://github.com/joyent/node/pull/8189
To make sure I understand correctly, in v0.8 `fs.stat('/some/path')` would silently swallow the error that no callback was passed? Oy.

Anyway that was back in v0.8 and now it should be fine to now throw if there's no callback in v0.12.

I can't remember the v0.8 API, but now all the `fs` functions have `fs.*Sync()` counterparts. So while there are some legacy cases where a function returns synchronously if no callback is passed, the API now has an explicit way to call all functions synchronously.

Guess what I'm getting at is we've now finished the v0.10 transition period and the API should start throwing if no callback is called in v0.12.