ipv6: rx_addr fixes

* make rx_sockaddr work for non-linux sockaddrs (sin_len is before sin_family)
* add a mask argument to compare
* use a union instead of rx_opaque for rx_address, to remove the alloc/free
* define some member marcos to help access union members
* more unit tests

Change-Id: I480235a2b0fbee47923459f5365d016cf4d7adfb
ipv6: rx.c: rx_compare_sockaddr with mask

Change-Id: Ic4fff344e9a23fce59a6ab8d14347ca1fc0c4bbe