fs: Add file descriptor support to *File() funcs

These changes affect the following functions and their synchronous
counterparts:

 * fs.readFile()
 * fs.writeFile()
 * fs.appendFile()

If the first parameter is a uint >= 0, it is treated as a file
descriptor. In all other cases, the original implementation is used to
ensure backwards compatibility. File descriptor ownership is never
taken from the user.

The documentation was adjusted to reflect these API changes. A note was
added to make the user aware of file descriptor ownership and the
conditions under which a file descriptor can be used by each of these
functions. The signature notation was updated to reflect the style used
by more recent documentation.

Tests were extended to test for file descriptor parameters under the
conditions noted in the relevant documentation.