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
Why wouldn't you want to embed the uv_fs_t?  Seems eminently sensible to me, the only thing that needs to change is the reinterpret_casts, those should be replaced with ContainerOf() calls.

Keeping a cache of node_fs_t structs around is a good idea but I don't think that necessarily needs to be part of this pull request.  (But if it will be, it should probably go in a separate commit.)