fs.stat third parameter controlling error creation

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.

Apply suggestions from libuv pull request

Thanks saghul: https://github.com/joyent/libuv/pull/1428

Fix the datastructures for async

Documentation update

Add tests and simplify Stat function

Apply the code review comments
Make the fs.js module configurable

fs.js now exports the function CreateConfiguredFSObject, which takes the
configuration hash and creates the fs object with that configuration.

This way the public interface of fs.js remains the same apart from a new
function added to it. The callback-is-last principle is preserved and the
module.js can still use the optimized stat, just like any other code. All that
needs to be done is to create the configured fs object:

var throwSafeFs = fs.CreateConfiguredFSObject({ throwSafe: true });