use __builtin_offsetof to implement offsetof when possible

apparently recent gcc versions have intentionally broken the
traditional definition by treating it as a non-constant expression.
the traditional definition may also be problematic for c++ programs.
add scsi headers scsi.h and sg.h

due to some historical oddity, these are considered libc headers
rather than kernel headers. the kernel used to provide them too, but
it seems modern kernels do not install them, so let's just do the
easiest thing and provide them. stripped-down versions provided by
John Spencer.
remove mips setjmp/longjmp code to save/restore fenv

nothing in the standard requires or even allows the fenv state to be
restored by longjmp. restoring the exception flags is not such a big
deal since it's probably valid to clobber them completely, but
restoring the rounding mode yields an observable side effect not
sanctioned by ISO C. saving/restoring it also wastes a few cycles and
16 bytes of code.

as for historical behavior, reportedly SGI IRIX did save/restore fenv,
and this is where glibc and uClibc got the behavior from. a few other
systems save/restore it too (on archs other than mips), even though
this is apparently wrong. further details are documented here:

http://www-personal.umich.edu/~williams/archive/computation/setjmp-fpmode.html

as musl aims for standards conformance rather than coddling historical
programs expecting non-conforming behavior, and as it's unlikely that
any historical programs actually depend on the incorrect behavior
(such programs would break on other archs, anyway), I'm making the
change not to save/restore fenv on mips.
fix inefficiency of math.h isless, etc. macros

previously, everything was going through an intermediate conversion to
long double, which caused the extern __fpclassifyl function to get
invoked, preventing virtually all optimizations of these operations.

with the new code, tests on constant float or double arguments compile
to a constant 0 or 1, and tests on non-constant expressions are
efficient. I may later add support for __builtin versions on compilers
that support them.
remove fenv saving/loading code from setjmp/longjmp on arm

the issue is identical to the recent commit fixing the mips versions:
despite other implementations doing this, it conflicts with the
requirements of ISO C and it's a waste of time and code size.
add MAP_NORESERVE to bits/mman.h

this is needed for qemu, and since it differs for each arch
it can't be circumvented easily by using a macro in CFLAGS.
remove MAP_32 from non-x86 archs

both kernel and glibc define it only on x86(_64).
add more arch-specific MAP_ macros to bits/mman.h

these are also needed by qemu.
tcp.h: add SOL_TCP, analoguous to udp.h
fcntl.h: add some linux-specific F_ macros

thankfully these are all generic across archs.
the DN_ macros are for usage with F_NOTIFY.
bits/signal.h: add register names for x86(_64)

glibc exposes them from ucontext.h.
since that header includes signal.h, it is safe to put them
into bits/signal.h, if _GNU_SOURCE is defined.
add obsolete futimesat()

this function is obsolete, however it's available as a syscall
and as such qemu userspace emulation tries to forward it to the
host kernel.
ipc.h: fix gnu aliases for key and seq in struct ipc_perm

the macro was the wrong way round, additionally GNU defines
__ prefixed versions, which are used by qemu.
unistd.h: fix wrong type for gid_t argument

the prototype is defined with const gid_t* rather than const gid_t[].
it was already correctly defined in grp.h.
add struct msgbuf to sys/msg.h
add sigandset and sigorset (needed for qemu)
add personality syscall
add arch_prctl syscall (amd64/x32 only)
fixup for fcntl.h changes
fixup sigandset