Abandon HubAction for a type

The argument parser will pass a string to the callable specified using
the "type" keyword argument.  This allows us to use util.parse_hub()
directly in an argument specification, without needing to set a special
action.  This switches from the "action=util.HubAction" methodology to
the "type=util.parse_hub" methodology and removes the now-unneeded
HubAction class and its tests.
Rework script interpretation

The script notifier calls a command.  The previous incarnation expected
the script expression to be a single string, which would then be split
up using shlex.  This approach uses the shell to split the script
arguments, and uses "type=" in the argument specification to prevent
unknown substitutions from being specified.
Use an empty category

The "category" in a notification is optional, defaulting to None.  In
our file and stdout notifier drivers, we can just use the "None" text
string, but for the script notifier driver, we use an empty string to
signal the absence of a category.
Add tests for the script notifier driver.
Add server properties to access app_name, app_id.
Add the gtk notification driver

Note that this driver does not work if PyGTK is not installed.  The
PyGTK package cannot be installed via a normal "pip install", so we
can't list it as a dependency; instead, we use conditional import
and a fake init() function that raises an explanatory exception
when the package is not available.