inet_drv.c: Set sockaddr lengths in inet_set_[f]address

Set appropriate values for the sockaddr length fields---sai.sin_len
and sai6.sin6_len---if those fields exist; rely on the NO_SA_LEN
configure check to see if they exist.  The length field exists on at
least FreeBSD, and there it needs to have a proper value for instance
in the call to sctp_bindx, or else that will fail with EINVAL.
Fix SCTP multihoming

Setting several ip addresses for an SCTP socket worked only for IPv4
on Linux.  For IPv6 and for other for instance Solaris and FreeBSD, it
failed with badarg for both IPv4 and IPv6.

For the first address specified to gen_sctp:open, bind is now called,
while for any following addresses, sctp_bindx is called, repeatedly,
with one address at a time.  Previously, sctp_bindx was called for all
addresses in one go, with the addresses in reverse order, and bind was
not called at all if more than one address was specified.  Both
Solaris and FreeBSD requires bind to have been called before calling
sctp_bindx, and FreeBSD additionally allows at most one address at a
time in the call to sctp_bindx.
Add checks for in6addr_any and in6addr_loopback

These variables are normally declared by <netinet/in.h>,
but for instance not on Windows 7, SDK 7.1.

Work around that by using IN6ADDR_ANY_INIT and IN6ADDR_LOOPBACK_INIT
if present, fallback to using :: and ::1.
Allow mixed IPv4 and IPv6 addresses to sctp_bindx

Also allow mixed address families to bind, since the first address on
a multihomed sctp socket must be bound with bind, while the rest are
to be bound using sctp_bindx.

At least Linux supports adding address of mixing families.

Make inet_set_faddress function available also when HAVE_SCTP is not
defined, since we use it to find an address for bind to be able to mix
ipv4 and ipv6 addresses.
observer: fix app file (Noticed-by: Motiejus Jakstys)

Add missing observer modules to observer.app.src.
release_handler:find_script/4 to use 're' matching in .appup scripts

The function release_handler:find_script/4 locates an .appup script
for a given application, and searches it for the matching up- or
downgrade script (given OldVsn). The original implementation of this
function used lists:keysearch/3 to find the matching script, but since
the .appup files nowadays may contain regexps instead of distinct versions,
that approach no longer works.

This patch uses re:run/2 to find a matching script instead.

Example:

Stock R15B:

Erlang R15B (erts-5.9) [source] [...]

Eshell V5.9  (abort with ^G)
1> release_handler:upgrade_script(stdlib,code:lib_dir(stdlib)).
** exception throw: {version_not_in_appup,"1.18"}
     in function  release_handler:find_script/4 (release_handler.erl, line 501)
     in call from release_handler:upgrade_script/2 (release_handler.erl, line 439)

Current patch:
Erlang R16B (erts-5.10) [source] [...]

Eshell V5.10  (abort with ^G)
1> release_handler:upgrade_script(stdlib,code:lib_dir(stdlib)).
{ok,"1.19",[restart_new_emulator,point_of_no_return]}
Merge branch 'bg/temp-hipe-fixes' into pu

Conflicts:
	lib/compiler/test/compilation_SUITE.erl
Merge branch 'ta/prim_archive-reloading' into pu
Merge branch 'hw/asn1rt_check-transform' into pu
Merge branch 'wc/fix-eunit-print-stacktrace' into pu
Merge branch 'mh/eunit_surefire-fixture-errors' into pu
Merge branch 'mz/odbc-support-param_query' into pu
Merge branch 'mp/fix-assembler-comment-char-for-hipe-ppc' into pu
Merge branch 'gp/make_erlang_mode_elpa_friendly' into pu
Merge branch 'tp/supervisor-pass-on-errors' into pu

Conflicts:
	lib/stdlib/src/supervisor.erl
Merge branch 'jv/forms-source' into pu
Merge branch 'msp/double_middle_endian' into pu
Merge branch 'slf/dyntrace-comment-and-func-cleanup' into pu
Merge branch 'fma/gb_difference' into pu
Merge branch 'sal/float_to_list_2' into pu