kompat: discard AT_SYSINFO to ensure faked OS release is read through uname(2).

AT_SYSINFO* vectors can be used to get the OS release number from
memory instead of from the uname syscall, and only this latter is
currently hooked by PRoot.

PRoot can now run recent programs (eg. from Ubuntu 13.04 x86_64) on
obsolete platforms (eg. RHEL 5 x86_64) without any further tweaks
(previously a binary patch against the ELF interpreter was required).
Fix the syscall number setting mechanism on ARM.

On ARM, the PTRACE_SET_SYSCALL request is required to change effectively
the syscall number during a ptrace-stop.  Moreover the syscall number
has to be valid (i.e. it can't be -2).

Reported-by: Corbin Champion <corbinlc@gmail.com>
Add a new entry into the roadmap.
Introduce a mechanism to execute forged syscalls after an actual syscall.

This will be typically useful to the kompat extension: for instance "pipe2"
can be emulated by chaining "pipe" and "fcntl".
Improve forward kernel compatibility, a.k.a. "kompat" extension or "-k" option.

A lot of "new" syscalls can be emulated with "old" syscalls + fcntl(2).
For instance:

    pipe2(fds, O_CLOEXEC | O_NONBLOCK);

can be emulated with 5 syscalls:

    pipe(fds);
    fcntl(fds[0], F_SETFD, FD_CLOEXEC);
    fcntl(fds[0], F_SETFL, O_NONBLOCK);
    fcntl(fds[1], F_SETFD, FD_CLOEXEC);
    fcntl(fds[1], F_SETFL, O_NONBLOCK);

There is still some remaining work:

- epoll_pwait: the "sigprocmask" behaviour is not emulated yet.

- eventfd2: the flag EFD_SEMAPHORE is not emulated yet.

- pselect6: the "timeout" parameter must be converted from "struct
            timeval" into "struct timespec".

- recv: the MSG_CMSG_CLOEXEC flag is not emulated yet.
Pass clone(2) flags down to INHERIT_* extension events.

This is useful to create different configuration according to the
clone(2) flags.
Make the -0 option fake the success of setgroups*(2).

Allows to run initgroups.

v2: commit message and indentation fix.
Signed-off-by: Cédric VINCENT <cedric.vincent@st.com>
Don't abort when a "spurious" sysexit event from a signaled tracee is reported.

When a tracee gets signaled during its "sysenter" stage, all ptrace
requests return "No such process", so PRoot removes its entry from the
list of tracees.  However, the kernel does report a "sysexit" event,
and there are no way of checking if this is a spurious event since all
ptrace requests succeed:

    1. ptrace event: sysenter (SIGTRAP | 0x80)

    2. the current tracee gets signaled

    3. ptrace request -> "No such process"

    4. ptrace event: sysexit (SIGTRAP | 0x80)

    5. ptrace request -> OK

    6. ptrace event: signaled

The solution is to check whether the tracee structure is sane.
Fix spelling
Add support for multiple command line interfaces (PRoot, CARE, DepsTracker, ...)
Split the generic CLI support apart from the PRoot specific part.
Move CLI related sources into a dedicated module.
Update PRoot CLI stylecheet to generate the new cli/proot.h file.
Don't rebuild build.h and co. systematically when a feature is missing.
Don't ignore the ELF interpreter anymore when the guest rootfs is "/" .

Due to the heap emulation, this trick is not required anymore (except for
programs that use constructors, like QEMU).
Force the kompat mode if the user kernel release is NULL.

As expected by CARE.
Add new hidden option "PROOT_IGNORE_MISSING_BINDINGS" + 1 indentation fix.

This option will be used by CARE.
Don't assume "/tmp" is always available, use P_tmpdir instead.

Some Linux embedded systems don't have "/tmp".
Add parse_integer_option helper + several hooks to the initialization stage.

This will be required by CARE.
Add print_version() helper + PROOT_IGNORE_MISSING_BINDINGS hidden option.

Both features will be used by CARE.