Added gnu-fixer.h to workaround a Glibc breakage on POSIX mode.

When the code is compiled with gcc -std=c99 -D_POSIX_C_SOURCE, Glibc
will break IN6_IS_* functions. Upstream has not fixed this yet.

To use, add it at the end of the #include list.

For more info:
* https://sourceware.org/ml/libc-alpha/2014-01/msg00471.html
Let addr6 use libipv6 too and reduce redundant code
Use IN6_* macros whenever possible; reduce redundant code
struct ether_addr was taken out of libipv6.c into its own header

This will be needed for the in6_addr_helpers module.
Added unit testing for libipv6; only one test for now.

This was used to make sure we didn't break a modified function in
the future. Let this commit work as an example for the unit testing
technique.

Make will try to create a timestamp file "libipv6.ts" if execution of
"libipv6.t" succeeds. libipv6.t will be created from libipv6.t.c, the
unit testing code.

Using a timestamp makes it easy to let Make know if it is necessary to
run the test again or not. If the timestamp technique is not used, Make
will run the test unnecessarily on each call.
Add in6_addr_helpers module, functions to manipulate IPv6 addresses

This commit includes unit testing, compilation and the module itself.
These functions will be used mostly to replace s6_addr{8,16,32} from
overall the code base.

Some of them will also help improve general code readability.

This commit does NOT yet use the module; it only adds it.
libipv6.c s6_addrNN replacements to s6_addr.

Replacement on functions where the only or best way was the to use
s6_addr directly.
Refactor by calling randomize_ipv6_addr() where applicable
addr6.c s6_addrNN replacements to s6_addr.

Replacement on functions where the only or best way was to use
s6_addr directly.
addr6.h: removed useless s6_addrNN declarations

If compiling in GNU mode or BSD mode, it will be already defined from
the system headers. The definition is redundant.

If compiling in POSIX mode, the structure internal symbols may or may
not be available. Under GNU, they are not available, so the definition
is also useless.
Remove some of s6_addrNN by using in6_addr_{set,check}_sig_and_key
Removed some s6_addrNN by using in6_addr_check_double_key()
Reduced some code by using in6_addr_cmp()
Reduced some code by using in6_addr_cpy64()
Reduced some code by using in6_addr_clear*() functions
Reduce code by using in6_addr_set_random_linklocal()
Replaced rest of s6_addrNN by using generic in6_addr_[gs]etNN() functions

These replacements are mostly a 1-to-1 functionality mapping. The reasons
for using generic _get16/_set16 functions were: either the code was not
understood, or not enough duplicate code was found to refactor, or using
generic functions was the optimal way to rewrite the code.
Compile using strict POSIX.