Add integration test scaffold

This is gonna be important in the commits to come (-:
Add an --upgrade-check switch

This can allow the reload function to test whether the upgrade is
going to fail for a terrible reason, like the bundler gem changing out
from under Einhorn.
Allow customizing the upgrade command line... via the commandline

This allows replacing the einhorn command name (say,
`/usr/local/bin/einhorn`) with a more intricate command
line (e.g. `rbenv exec bundle exec einhorn`). That command line will
be split using shellwords.

To that end, introduce `Einhorn.upgrade_commandline`, a helper method
that can construct the command line used when reloading code.
When upgrading, start a sentinel to see if re-execing can work

The intention is to that instead of taking down the Einhorn
master (like it would previously) and leaving its worker children
orphaned, this will make the master scream if it can't safely re-exec.
Add a command line switch to drop env vars on upgrade

This should allow anyone who uses bundler or rbenv to un-poison the
environment that gets passed on to the upgraded einhorn process, so it
can pick up the correct & current version that's intended.
Add directory fixtures to run einhorn in
Don't automatically #communicate in the einhorn test helper
On startup, don't exec the upgrade commandline

This would launch einhorn's re-exec command instead of the worker,
confusing EVERYTHING. Now, launch the worker properly again.
Corectly check for upgrade sentinel exit status
Add :re_exec_commandline to TransientState structure

We reference it in places, but didn't have it before. Oops.
Add an integration test for proper restarting

This is fairly ugly - but I think we can get this to look nicer.
Flip the behavior of the einhorn helper's :expected_exit_code

We're going to use the non-expecting version way more.
Clean up the restart test

* No more chunder on stdout and stderr
* In fact, capture stdout and stderr of einhorn and return it from the
  helper.
* Remove a silly debug print statement from the test
Disable the vestigial test rake task

It only runs a subset of duplicate tests from the actual test rake
task, so it can really die.
Use plain Subprocess in startup tests

This is way more reliable/better than the einhorn helper (which is
meant to provide support for the long-running form of einhorn).
Add (failing) tests for commuting environments

This is pretty much the meat of this whole branch: When upgrading the
einhorn master, we should correctly re-exec the running process (that
is, with the given command line).
Perform a reloading upgrade regardless of circumstance

Before, when einhorn wasn't running with preloading, it would not
reload itself. I think this is inconsistent, especially when there's
--reexec-as involved; so make it always re-exec.
Update the upgrade and fleet_upgrade docs to reflect new reload behavior
Add tests for --drop-env-var and its interaction with --reexec-as

This should pretty much cover all the changes we need to make einhorn
resilient to bundler/rbenv ruby upgrades.
Try to make the tests compatible again with 1.8.7 and above

* Use File.open() { f.write } instead of File.write
* Use require(File.expand_path(...)) instead of require_relative