Mac: Weakly link to IOHIDDeviceGetService() to restore 10.5 compatibility

Using IOKit IOService:/ paths requires the IOHIDDeviceGetService()
function, which is only available on OS X 10.6 and above.

To restore compatibility with OS X 10.5, weakly link to
IOHIDDeviceGetService() so it can be used when it's available.
When it's not available (on OS X 10.5), be naughty and pull it out of
the IOHIDDevice struct.

For OS X 10.5 compatiblity any binary using hid.c must be
compiled/linked with '-mmacosx-version-min=10.5', so
IOHIDDeviceGetService() is linked weakly.

Trying to run a binary on OS X 10.5 that has IOHIDDeviceGetService()
strongly linked results in the following error:

dyld: unknown required load command 0x80000022
Trace/BPT trap