new constants
IPv6InterfaceData: add multicast data
UDP: implemented ReuseAddress option (it's like SO_REUSEADDR socket option in Linux)

If ReuseAddress is set to true on two sockets, then they can bind to the same
local address/port.

E.g. the following works:

      UDPSocket s1, s1;
      ...
      s1.setReuseAddress(true);
      s1.bind(7777);
      s2.setReuseAddress(true);
      s2.bind(IPv4Address("10.0.0.1"), 7777);

s2 will receive packets whose destination address is 10.0.0.1, s1 will receive all other packets
IPv4Route/IPv6Route: add administrative distance field

The route entries are sorted first by administrative distance, then by metric.
When looking up the best route for a destination, then routes with lower
administrative distances are preferred. Metrics are compared only if
the administrative distances are the same.

Default values for these distances are defined in RouteAdminDist enums,
but they are set only for interface and static routes.
rename and extend parent/child interface data in IPv4MulticastRoute

- the new names are more common (in/out)
- subclasses of IPv4MulticastRoute can extend InInterface and OutInterface

Note: this is not backward compatible change
IPv4: add notifications about multicast routing events

these notifications can be used by routing protocol modules (e.g. PIM)
to update their states
add factory methods to routing tables to create new routes

so subclasses can use their own route types
RoutingTable6: fire change notifications when the routes are changed
RoutingTable: make 'routes' and 'multicastRoutes' fields private

to make sure that subclasses could not violate its invariants.
(These vectors must be sorted according to prefix lengths.)
RoutingTable6 fix: clear cached routes when the interface is down or the routing table changed
InterfaceEntry: replace protocol[34]data with isisdata and trilldata