fs: promisify fs.stat and fs.readFile

Add a new exec flag `--promisify-core` to enable the partial and
experimental support for promises in the core APIs.

Modify `fs.stat` and `fs.readFile` to return a promise when
no callback is specified.

Add helper functions
  `makeCallbackOrPromise` and `maybeCallbackOrPromise`
that serve as a replacement for
  `makeCallback` and `maybeCallback`
and make it super easy to add promise support to existing code.

**BREAKING CHANGE**

Before this commit, when an async function was invoked without
a callback, it would:

 - silently discard the result on success
 - throw an error on failure, this error would go to "unhandled error"
   handler (domain or process)

The commit changes the error behaviour: the rejected promise will
be silently discarded, because the current version of V8 does not
provide any way for detecting rejected promises that don't have
any `catch` handler.

In the future, if V8 and/or the Promise standard provide a way for
detecting unhandled rejections and Node integrates that mechanism,
then this behaviour will be automatically reverted back.