in case of a failure, try to report the exit code
Bumping up the base version.

The immediate motivation is to get rid of 'Error:java: error: Exception
thrown while constructing Processor object:
com/google/common/collect/Multimap' problem, but this also lets us get
rid of some of the reflection code in this plugin to work with earlier
versions of trilead
Get rid of compatibility code for ancient versions of Jenkins
This plugin is confused about how the channel shutdown processing should happen.

Jenkins core calls afterDisconnect() from Channel.Listener.onClosed() (from the setChannel() method),
and this plugin installs its own Channel.Listener that has the onClosed() method.

The former gets called before the latter, and therefore some of the computation that was expected
to happen in the latter wasn't properly taking place. I'm consolidating both pieces of the shutdown logic
into a single function.

In this commit, the order of those two pieces are preserved, and one can already see that something isn't quite right here.

The next commit will clean up the afterDisconnect() function to make it do the proper thing
Clean up the channel loss handling.

Here, there are three layered connection-like things we need to think about.

1. SSH connection, which is a TCP/IP socket connection that multiplexes multiple "SSH channels" in it.
2. SSH channel, which is a logic sub-connection inside SSH connection that connects to the slave stdin/out and controls the process.
3. Remoting channel.

afterDisconnect() gets called when the #3 is lost, and hopefully when that happens #1 and/or #2 are still active. For example,
if the slave process has segfaulted, then SSH channel is still alive and it will bring the HotSpot crash dump of the JVM to the master
and the exit code. We want to capture that as it's a valuable diagnostic information.

We also want to know when the #1 is lost due to the underlying socket problem. This change doesn't address that, as the Connection class
needs to expose this information.
If the socket to SSH server is lost, report that.

... as opposed to the situation where the slave process has gotten a problem.

When I kill -9 the per-session sshd process, I get something like this:

ERROR: Socket connection to SSH server was lost
java.io.IOException: Cannot read full block, EOF reached.
	at com.trilead.ssh2.crypto.cipher.CipherInputStream.getBlock(CipherInputStream.java:81)
	at com.trilead.ssh2.crypto.cipher.CipherInputStream.read(CipherInputStream.java:108)
	at com.trilead.ssh2.transport.TransportConnection.receiveMessage(TransportConnection.java:232)
	at com.trilead.ssh2.transport.TransportManager.receiveLoop(TransportManager.java:685)
	at com.trilead.ssh2.transport.TransportManager$1.run(TransportManager.java:481)
	at java.lang.Thread.run(Thread.java:722)

So I still got some work to do to have it report the exception, not -1 from "int read()", but this is a progress.
Don't try to do SFTP stuff if the SSH connection is already lost.
if the exit code is not known and the connection is lost, it's probably not that the slave is still running.

Most likely it's just that the exit code didn't get reported before the connection is lost.