feat(ulibc): add __libc_init_array/__libc_fini_array and update crt0.S
Add constructor/destructor support to ulibc:
- New file init_fini.c: implements __libc_init_array() to run .preinit_array
and .init_array global constructors, and __libc_fini_array() to run
.fini_array global destructors.
- Updated crt0.S: calls __libc_init_array before main and __libc_fini_array
after main returns (matching Newlib crt0 behavior). Also uses 'environ'
symbol (POSIX) and adds .note.GNU-stack for NX compatibility.