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.
Fix and activate functional tests on Travis

- Edit the .travis.yml so that functional tests run as well as unit
  tests
- Fix the functional tests so that they work on the Travis CI
  environment (Ubuntu)
Add switch for simplified log format

We made a change previously to simplify the log format and coloring
for console/stdout output. (I believe this was so that subcommands
like 'build' and 'deploy' produced more user friendly output.) This
is a bit too simple though since it is still useful to have the full
log format when running master and slave services.

We can have it both ways! This adds a flag to the configure_logging
call that will switch between the standard and simplfied log format.
Merge pull request #6 from box/xargs_arghh

Fix issue where atomizer command fails silently
Merge pull request #7 from box/smarter_log_formatting

Add switch for simplified log format
Add CORS support for API requests

This change will allow users of ClusterRunner to build dashboards
against the ClusterRunner API while keeping the API secure against
unlimited cross-origin access.
Merge pull request #8 from box/cors_support

Add CORS support for API requests
Stub filesystem side effects in unit tests

We still had a few unit tests touching the filesystem. This commit
changes the import style of several files, and adds some patches in
BaseUnitTestCase to guard against use of various methods that touch
the filesystem.
Fix pexpect calls in git project type to avoid infinite hanging.
Merge pull request #9 from box/fix_pexpect_hanging_for_git

Fix pexpect calls in git project type to avoid infinite hanging.
If child exitstatus in git command is non-zero, don't throw exception.

Instead log it. It looks like the child.exitstatus is not being set to 0
even upon success.
Merge pull request #11 from box/dont_throw_exception_childexitstatus_nonzero

If child exitstatus in git command is non-zero, don't throw exception.
Fix unreliable child.exitstatus being set in git command execution

Adding a child.close() will guarantee that child.exitstatus will be set
properly.

Also add the raise exception back in.
Merge pull request #12 from box/fix_unreliable_child_exitstatus

Fix unreliable child.exitstatus being set in git command execution
Merge pull request #10 from box/stub_filesystem_side_effects_in_tests

Stub filesystem side effects in unit tests
Add default pylintrc file
Fix all lint errors in app

I also disabled some of the default lint rules so that we don't have
a ton of noise from lint, and also enabled pylint on TravisCI.

The command to run pylint locally is
 `pylint --rcfile=test/pylintrc app`
Merge pull request #13 from box/enable_pylint

Fix all lint errors in app
Move non-service subcommands onto main thread

This change moves execution of the non-service subcommands (i.e.,
`build`, `stop`, `deploy`) onto the main thread. There is no good
reason not to execute these on the main thread, and putting them on
the main thread makes them easier to control via signals.

For example, killing a "clusterrunner build" process will now only
require hitting ctrl-C once instead of twice.
Merge pull request #14 from box/main_thread_subcommands

Move non-service subcommands onto main thread