Use offsetof() in io.c

This silences the following UBSan errors:

beam/io.c:7131:27: runtime error: member access within null pointer of type 'ErlDrvSysInfo'
beam/io.c:7140:20: runtime error: member access within null pointer of type 'ErlDrvSysInfo'
beam/io.c:7166:20: runtime error: member access within null pointer of type 'ErlDrvSysInfo'
beam/io.c:7174:20: runtime error: member access within null pointer of type 'ErlDrvSysInfo'
Properly handle SINT_MIN in small_to_big()

As there is no overflow for signed integers, -SINT_MIN is undefined behaviour
and the cast to unsigned needs to happen before negation. SINT_MIN denotes the
minimum value that can be stored in the Sint type.

beam/big.c:1512:6: runtime error: negation of -9223372036854775808 cannot be represented in type 'Sint' (aka 'long'); cast to an unsigned type to negate this value to itself
Implement --enable-sanitizers[=sanitizers]

Similar to debugging with Valgrind, it's very useful to enable
-fsanitize= switches to catch bugs at runtime.

$ ./configure
Result: no sanitizer enabled

$ ./configure --enable-sanitizers
Result: -fsanitize=address,undefined

$ ./configure --enable-sanitizers=address,thread,undefined
Result: -fsanitize=address,thread,undefined

$ ./configure --enable-sanitizers=undefined
Result: -fsanitize=undefined
Fix abort of nosuspend-tasks in erts_port_task_schedule()

The counter for the amount of outstanding data in the port queue
became inconsistent when aborting nosuspend-signals in
erts_port_task_schedule(). This since the counter was subtracted
by the data size of the signal although the data size had never
been added to it. This inconsistency caused the port queue to
remain in a busy state forever.
Add async_ports test
Update Makefile.src
Fix build of test port program
correction of huge status bar

following the last evolution - use wxStatusBar:new(Frame) then wxFrame:setStatusBar(Frame, StatusBar), the status bar use the full space available in frame.
move the creation of the status bar after the creation of the notebook and the mainsizer.

it is ok on windows 7 64bits, no other test done so far.
Merge branch 'tuncer/sanitizers' into maint

OTP-12081

* tuncer/sanitizers:
  Implement --enable-sanitizers[=sanitizers]
erts: Fix neg int overflow when sint is min size

When INT64_MIN is the value of a Sint64 we have to first cast it to
an Uint64 before negating it. Otherwise we get an integer overflow
which is undefined behaviour and in gcc 4.9 this results in -0 instead
of -9223372036854775808 in gcc 4.8.
Merge branch 'rickard/nosuspend-bug/OTP-12082' into maint

* rickard/nosuspend-bug/OTP-12082:
  Fix build of test port program
  Update Makefile.src
  Add async_ports test
  Fix abort of nosuspend-tasks in erts_port_task_schedule()
ssh: Negotiation_timeout testcase
ssh: negotiation_timeout bug fixed
Merge branch 'hans/ssh/negotiation_timeout_bug/OTP-12057' into maint

* hans/ssh/negotiation_timeout_bug/OTP-12057:
  ssh: negotiation_timeout bug fixed
  ssh: Negotiation_timeout testcase
ssh: Updated vsn.mk
Merge branch 'hans/ssh/prepare-release' into maint

* hans/ssh/prepare-release:
  ssh: Updated vsn.mk
Merge branch 'pascalchap/observer_issue' into maint

* pascalchap/observer_issue:
  correction of huge status bar
Merge branch 'nox/clang-ubsan/OTP-12097' into maint

* nox/clang-ubsan/OTP-12097:
  Properly handle SINT_MIN in small_to_big()
  Use offsetof() in io.c
Merge branch 'lukas/erts/fix_neg_of_int64_min/OTP-12097' into maint

* lukas/erts/fix_neg_of_int64_min/OTP-12097:
  erts: Fix neg int overflow when sint is min size