Resolve a compiler warning

Resolve "taking sizeof array of runtime bound [-Wvla]".
Make it clear that root needs to set uid and gid
Disable OOM killer to keep dmesg clean

Refactor killall() so it won't rely on OOM killer most times.
Side effect is that the memory limit may be increased by 0.1 MB when
killing processes.
Remove some magic numbers from strconv
Remove false "unused" from fs.h
Close fds earlier

Do not rely on new /proc. Use existing one to get fds.
Add sysctl related code

- Set some sysctls (disabled by default)
  It seems current kernel use global variables for sysctls
  like vm.oom_kill_allocating_task etc. In order not to
  mass up with outer kernel config, these added lines are
  disabled.
- Forbid access to /proc/sys
Make default interval smaller

Default `--interval` is changed from 50ms to 20ms
to detect exceeds and kill processes sooner.
Use safe signal handler

Calling printf in signal handler is dangerous. Rewrite to use safe method.
Besides, renice -5 to make lrun more responsive.
Write compilation flags in version

Makes it easier to know seccomp and debug feture is enabled or not.
Move clone_flags_str out

Cgroup::spawn is too long. Move out the debug helper method.
Set more rlimits

Set RLIMIT_CORE and RLIMIT_FSIZE. Correct RLIMIT_CPU.
Check cgroup empty

If the cgroup becomes empty for some reason
(theorically should not happen). Get out of
the main loop.
More reliable way to check Z state

Previously method to check Z state is not reliable.
A process which sets its name to a string containing
" Z " was considered a zombie, which is wrong.
Clean up OOM killer related code
Split main()

main() is too long. Split it into different methods.
Enforce flock on cgroup

This makes it possible to run multiple instances
with a same `--cgname`.
Add locks when writing logs

The terminal won't be massed up by multiple processes now.
Note: the lock file is at /tmp. If /tmp is set to a
different location (by --bindfs or --tmpfs), the lock will
fail between the child and lrun main process.
Move get_fds() out from do_close_high_fds()

Needs get_fds() later.
Spawn pid 1 (init) in new pid namespace

pid 1 ignores signals including SIGKILL by default,
causing unwanted side effects, namely some rlimits
will not work.
Make pid 1 our process and run the user process as
pid 2.

Note: the feature requires linux >= 3.8. Prior to
3.8, pid namespace implementation is not complete.