fix bug of printing non-existing file name

"cat" prints an error message when "no such file or directory" happens.
use sys/stat.h to get file attributes

Issue: How to check if other OS has this function?
add mode field into romfs
show access rights for each file in "ls"
add .account_config

This file is set to be hidden and only read/write by root. It lists all
IDs of users to simulate access control.

Issue: How to change mode of .account_config to 600? Its default mode in
       this commit seens to be 644. Now, I change its mode in Makefile.
let "ls" accept -a / --all option

The option enables showing hidden files. You can use --all for the same
function, too.
add fio_getline into fio.c

It is mainly for reading .account_config line by line so far.
integrate romfs_mount into romfs_get_file_by_hash

The advantage is reduction of code, but there is many casts caused by
inconsistency of pointer types and qualifiers. Note that the position
of romfs_get_file_by_hash is changed to avoid declaration warning.
replace hard-coded 4 by sizeof expressions
rename find_envvar to getenv

This function is considered to have less relationship to strings, so it
lives in shell.c rather than string-util.c
add putenv into shell.c

Handler of "export" is reduced using putenv.
let USER be set at the start

USER marks your identification, and can be checked by file system for
access control.

Issue: getenv() returns its value buffer directly, so its value may be
       changed using a getenv() call followed by a modification to the
       buffer.
prevent writing USER through putenv

USER can only be changed by putenv_internal. Kernel has the rights to
use it directly, but user does not.
check access rights before returning file content

Here, a demonstration of access control is performed.
print access error through fio_perror

Interface fio requires romfs to implement a reference of fio_err, and it
must store a string of the last error message. It lets error messages be
arranged by romfs.

Issues:
1. Should fio_perror be a critical section?
2. The reference function has different name from my MINGW.
   (__errno v.s. _errno)

TODO: Implementation of strerror (string.h) to formalize error message
      provision.
simplify initialization of commands with macro

Issue: Original enumeration constants are uppercase, it seens that _name
       does not convert my lowercase into uppercase. Thus, enumeration
       constants are adjusted into lowercase in name part of commands.

References:
[1] http://gcc.gnu.org/onlinedocs/cpp/Stringification.html
[2] http://stackoverflow.com/questions/216875/in-macros/216912
implement "su" command

It offers a method to switch user. Because USER cannot be modified using
putenv (export), this command is the only way to modify this variable.