change the way MAC address retrieval is performed on OS X

Fix for bug #587067:

The sockaddr_dl structure's tail buffer contains both the interface name and the MAC address. This structure was being marshalled as if the buffer was always 12 bytes long - allowing 6 bytes for the interface name and 6 for the MAC address - but in truth the buffer is variable-length, to allow for interface names longer than 6 bytes. Variable-length buffers can't be directly marshalled so we change the MAC address retrieval to use Marshal.Copy with pointer arithmetic instead.