Use empty? in node-list converge test
Log node-map exceptions at trace
Infer os-family and os-version from node

When running a lift or converge, determine the os-family and os-version from the
node, putting the result into the settings under the :pallet/os facility.
Run pallet/os phase before settings
Fix check in os crate
Quieten test output
Fix random failure in operations-test

The "lift two phases for two nodes in a group" test was failing, but
not reliably.  I think this was caused by the is condition in seen-fn
failing.
Factor out obfuscated-passwords function
Add :apt to debconf script implementations
Fix looseness in node-spec contracts
Guard PPA addition with apt list file check

Before installing a PPA, ensure it's .list file doesn't exist in
/etc/apt/sources.list.d.
Factor VersionMap into p.core.version-dispatch

Generalise the version map lookup and move to pallet.core.version-dispatch.
Make packager lookup map based

This makes the lookup of packager based on os-family and os-version extensible.
Improve p.c.user namespace docstring
Split out execute-on-unflagged

Adds execute-on-filtered, execute-and-flag and makes execute-on-unflagged not
set the flag on completion.

Allow actions to be run on unflagged nodes without the setting of the flag.
Ensure admin-user is set and reported correctly

The admin user should always be in the environment.
packager reports based on detected os if needed

When the packager is not returned by the node, and the node does not report an
os-family and os-version, the use the detected os to determine the packager.
Add :os-detect option to lift and converge

This option can be used to control the detection of os-family and os-version on
each node.  By default, os detection is enabled.
Fix argument order in lift-nodes
Don't set default ssh keys if password given

In pallet.api/make-user, do not specify the default key paths when a password is
passed.