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.
We talked a bit about this offline, but just to summarize here in painful detail: this is actually what we want. An example would be if the user had specified a "find" command in the atomizer section:
```
    atomizers: 
        - TEST_FILE: find . -name test_*.py
```

then an example of what might be output by this method is:
```python
[
    'export TEST_FILE="test_classA.py",
    'export TEST_FILE="test_classB.py",
    'export TEST_FILE="test_classC.py",
]
```

(These would later be prepended to whatever is in the "commands" section and distributed across the slave machines, e.g., `export TEST_FILE="test_classA.py; nosetests $TEST_FILE;`)