InvariantDisks initial

InvariantDisks is a small program maintaining a mapping from invariant
labels to the potentially varying /dev/disk* entries. Only the CLI
skeleton and other infrastructure exists.
DiskArbitration integration

The DiskArbitrationDispatcher dispatches appearance and disappearance
events from disks to the registered handlers. The log handler just logs
the disks with the aid of the disk arbitration utilities.
Readme and License

This program is licensed under a "3-Clause BSD" license.
DiskInfoLogger

Renamed from DiskArbitrationLogger, which is a very unwieldy name.
MediaPathLinker

Create symlinks from a media path derived link to the associated
dev files. This is only possible for disks that have an IODeviceTree
media path.
More Information

Also extract the volume path and the media content keys from the
DADiskRef. An IOKit dictionary is also created as preparation for
additional information demand.
Readme update

More details, and using the correct project name.
Minor code cleanup

Use 755 instead of 744 when creating new directories, which gives
list rights to group and others as well. Simplified directory
creation code. Dead code is not needed.
DiskInfo generation refactoring

Only create a DiskInformation object once per DADiskRef in the
dispatcher. That allows DiskArbitrationHandler to reuse the information
which improves efficiency.
Minor logging fix

Make the logging much more readable, with just one data element per line.
UUID Linker

Links disks/volumes by media/volume/device ID. I am unclear what
the various IDs imply, but disk images have volume UUIDs, while
normal volumes and core-storage volumes have both media and volume
UUIDs, and some volumes only have media UUIDs.
DiskInformation with serial and flags

Add the device serial number and some flags to the DiskInformation
object. The serial number is available in all devices, volumes and
even core storage devices on a particular device. The device model
is also available.
Serial Linker

Links whole disks by their device serial number. The model and serial
number are both used in the symlinks for more human readability. There
is no straight-forward way to identify physical whole disks, but the
implemented heuristic seems to work well.
Readme update

The new features are now properly described in the readme file.
More robust error handling

Instead of checking for potential issues with symlink creation/
removal, just try it and handle the errors. The errors are now also
made more human readable.
Log Verbosity control

The verbosity of the logging can now be changed by adding -v. By default,
the Program is significantly less talkative.
Improved Command Line Parsing

Command line parsing is now more scalable and more reliable. A map of
Handler for the command line flags replaces counting and searching in
the flags. Not quite boost::program_options but ...
Partition support in SerialLinker

Partitions are now also linked in by-serial, with a media-path style
colon + partitionId suffix. This allows using stable IDs without a
fixed partitioning scheme.
Minor fixes

A tiny bit more consistency.
License Extension

In addition to the 3-Clause BSD License, also license under the CDDL.