split Socket into mcast listener and unicast sockets

this also allows listeners to listen on multiple interfaces at once in a
straightforward manner.
virtual calls in ctors don't work.
track libhexabus interface changes