Wait indefinitely when launching slave agent with a timeout of zero

Summary:
The docs claim that a timeout of zero means forever, but sometimes it
turns out to really mean zero. We correct that here.

Test Plan:
Ran the new code on our Jenkins installation, saw that we didn't get the
timeout message where Jenkins waits for only about 5 seconds before
claiming that it failed to launch the slave agent.

Reviewers: csilvers

Reviewed By: csilvers

Differential Revision: http://phabricator.khanacademy.org/D10554
More logging when we decide to time out a slave.

Summary:
They're timing out much more often than I'd expect -- even when we're
doing back-to-back deploys they are timing out.  Not sure why.  I am
hoping this logging will shed some light.

Test Plan: Fingers crossed.

Reviewers: chris

Reviewed By: chris

Differential Revision: http://phabricator.khanacademy.org/D11464
Restart slave.jar when it dies.

Summary:
Sometimes slave.jar dies due to an OOM error or the like.  In those
cases, make it automatically restart.  Jenkins doesn't notice that
slaves are dead in order to restart it themselves.

Test Plan:
Fingers crossed.  I'll install this on jenkins, terminate all the
jenkins-slave machines on ec2, and run make-allcheck, and make sure
the slaves start up properly.  I don't know what
com.trilead.ssh2.Connection.execCommand does, but it looks like it
just runs the given command in the shell, based on code example #6 at
   http://www.programcreek.com/java-api-examples/index.php?api=com.trilead.ssh2.Session
   >>> sess.execCommand("uname -a && date && uptime && who");

Reviewers: jlfwong

Reviewed By: jlfwong

Subscribers: chris

Differential Revision: http://phabricator.khanacademy.org/D14010
Fix the stopping/pending message when launching a slave

It currently always says the slave is stopping when it's launching an
instance. The while loop and switch have been modified so the
appropriate logging message appears now.
Consider only slaves for the requested label when decrementing excessWorkload by number of pending spot instance slaves
Handle AssociatePublicIp in spot instance slaves
Support cloud-formation compatible user-data in spot-instance slaves
Retry updating remote tags also for ondemand instances
Merge pull request #120 from syncron/master

[JENKINS-25029 ] Retry updating remote tags also for ondemand instances
typo in error code
Merge pull request #121 from syncron/master

typo in error code
Merge branch 'master' of http://github.com/jenkinsci/ec2-plugin

Conflicts:
	src/main/java/hudson/plugins/ec2/EC2RetentionStrategy.java
Merge pull request #122 from Khan/master

Respect timeout=0 when launching slave agent, and restart slave when it dies.
Merge pull request #116 from jsternberg/fix-launch-instance-message

Fix the stopping/pending message when launching a slave
Merge pull request #117 from EverythingMe/JENKINS-25693

Resolve [JENKINS-25693] pending spot instance launch blocks launch of non-spot instances.
Add option to obtain EC2 credentials from instance meta data service / instance profiles
fixing zombie workers
* if AWS api wasn't reachable node where delete from jenkins, but was still existing in AWS.
* PR #79 (https://github.com/jenkinsci/ec2-plugin/pull/79) introduce this cause.
* Now node will only delete from jenkins when AWS request was successfully.
Include new parameter in jelly's with-clauses, respect it in doFillRegions
Update help-instanceCapStr.html

I think this needs to be clarified - people should be aware that if instance limit was increased by somebody in organisation, Jenkins plugin can spawn a 1000000$ farm :)
Removed looping code to start Java in Unix launcher