remove unused read_romfs_task
add strcat into string-util.c
modify string-util.c to include string.h

I think that string-util.h makes more sense to include string.h, and
stddef.h becomes a redundant #include.
add utoa into string-util.c

This is not a part of C standard library, so it is assigned static.

Reference: tim37021/freertos
add itoa into string-util.c

It invokes utoa to reduce duplicate code. I think only decimal numbers
have meaningful negative sign, so I check base==10 with num<0.

Reference: tim37021/freertos
add sprintf into string-util.c

It supports only %c, %d (%i), %s and %X now.

Reference: tim37021/freertos
implement "ps" command

It depends on vTaskList() debug function, and configUSE_TRACE_FACILITY
must be set to 1. Previous 3 implementations are for its demand.

Reference: tim37021/freertos
implement "cat" command

"cat" accepts a sequence of file names, and output them to stdout.

Reference: read_romfs_task in original project.
cancel unused argument from romfs

romfs_get_file_by_hash accepts argument len to store file length, but it
is not used by current system. Furthermore, it will make my future
implementation more complex.
remove size check in romfs_get_file_by_hash

Size-0 files should be conceptually permitted.

Issue: How about cat an empty file?
insert filename section into romfs

This section is a plaintext of filename, necessary for future "ls"
implementation. The following website shows the structure of ROMFS.

Reference: https://embedded2013.hackpad.com/Lab21-RTOS-shzzlckJ50f
implement simple mounting for future "ls"
get file attributes during traversal

fattr.h is planned to contain many related constants in future, so it is
an independent file now.
implement "ls"

This version does not consider the consistency of directories shown in
command line and actual starting point. (/ V.S. romfs/)
(conceptually) add current working directory

"cat" can accept file name directly, as if you are in /romfs directory.
"ls" takes current working directory as a start point for fio_list(). But
the system has no ability to move between different directories.
let "command not found" be put into 2 (stderr)
add puts into string-util.c

Note: This puts() do not put \n after string.
simplify shell using puts
let ls support -l option

Note: itoa is not general enough for size_t field, so I use sprintf with
      %u to indirectly call utoa.
define PRINTF_BODY to integrate printf's

This macro defines a frame of all printf's. It requires that _PUTC_ and
_PUTS_ are defined, which represent "put char" and "put string" callbacks
respectively. Also, it has potential convenience for implementing other
kinds (fprintf, vprintf, etc.) of printf's.