Fix issue where atomizer command fails silently

Previousy we had logic to check the exit code of the atomizer command,
but since we were piping the defined command through xargs the "real"
command could fail silently. The effect of this would be that we'd
construct invalid atoms (containing whatever error message output by
the failing command), which would be sent to slaves and executed as
shell commands.

Since we would then execute error message strings as shell code, the
effects of this could be unpredictable and potentially dangerous!

The main changes in this commit are:
 - A general refactoring of our ClusterRunnerConfig class which greatly
   simplifies the logic involved in parsing the atomizer section. (This
   removes a few undocumented atomizer formats that we aren't using.)
 - A new Atomizer class -- this is what now holds the logic for
   converting the data structure parsed from yaml into the executable
   atom commands.
I think putting the validation here is fine for now, but if this gets any more involved we may want to consider moving this to a separate class.