Adds support for receiving multicast packets

Adds support for receiving multicast packets. The addition only works on Mac OS for now.

With multicast, clients choose to subscribe to packets by subscribing to a multicast group. The benefit over setting the packets to be received by everyone on the network listening to a specific port (i.e. broadcast) is that it enables routers to use network bandwidth more economically, mostly useful when streaming lots of data. http://en.wikipedia.org/wiki/Multicast_address

In this implementation, listening to an IP address in the multicast range (224.0.0.0 through 239.255.255.255) automatically enables multicasting on the socket.
I think it would be good to avoid calling std::exit in this code. I could see situations where we wouldn't want the app to crash just because we were unable to set the socket options.  - I think the runtime error is enough here.