Only set the monitor callback once.
Replace CGDisplayIOServicePort with a workaround

This could be cleaned up and refined a bit by comparing more display
attributes when available, but it gets the job done.

Closes #192.
Cleanup of CGDisplayIOServicePort replacement.
Fixed leak of display name.