separate RS232 I/O into serial_io.c

Purposes:
1. Reduce size of main.c, hiding hardware details.
2. Cease warning of implicitly declared send_byte().

Issue: I do not rename main.c into serial_io.c, and the two files exist
       as expected.
implement stdin feature through USART2

1. Enable USART2 Rx mode.
2. Queue up input and let USART2_IRQHandler handle RXNE interrupt.
3. Let recv_byte wait for a byte from the queue.
4. Fill in stdin_read using recv_byte.

Reference: c0dcd & 1a913 from zzz0072/freertos/master
print \r before \n

It causes no problem in CLI mode when only a \n is printed out, but the
cursor moves down without returning to the head of a new line when no \r
is printed following / followed by a \n.
add strlen into string-util.c

[!] Don't forget "naked" attribute:
Use this attribute on the ARM ports to indicate that the specified
function does not need prologue/epilogue sequences generated by the
compiler. It is up to the programmer to provide these sequences.
add strcmp into string-util.c

[!] Don't forget "naked" attribute.
add strncmp into string-util.c
add isspace into string-util.c

TODO: Improve it using predefined character table.
add isalnum into string-util.c

TODO: The same as isspace().
use -ffreestanding to disable all built-in functions
transplant shell from rtenv

Commands:
1. echo
2. export
3. help
4. history
5. man
6. ps (not finished)

Issue: The linker seens not to link standard C libraries, so isalnum &
       isspace are defined as macros rather than including ctypes.h