fix node state transitions and threading improvements

This checkin does the following:
1. Makes the plugin more thread safe.
2. Exposes the node object in the ExecutorWorkerThread
 to allow gearman function updates to be more efficient and makes it
 simpler to track new slaves vs existing slaves in the system.
3. Treat slave disconnect the same as a slave deletion.  Disconnect will
 stop the associated executor worker thread.  Connect will spawn a new
 thread for the slave.  This more closely matches how jenkins
 treats slave states.

src/main/java/hudson/plugins/gearman/ComputerListenerImpl.java
src/main/java/hudson/plugins/gearman/ExecutorWorkerThread.java
src/main/java/hudson/plugins/gearman/GearmanPluginConfig.java
    Expose the node to listeners for updating gearman functions
    Treat slave disconnect the same as a slave deletion

src/main/java/hudson/plugins/gearman/GearmanProxy.java
    Made lists into syncronized list

src/main/java/hudson/plugins/gearman/ProjectListener.java
    Syncronized iteration of lists

Change-Id: I7d7a40ec7783e3e7f21c9974dad9159beee6b985
gearman function update on jenkins node label change

This checkin enables the gearman plugin to update gearman
functions on a node label change.  We use a SaveableListener to
listen for changes to nodes and projects.  The SaveableListener
is a catch all for any event that requires a save.  If any change
happens then we re-register all gearman functions in every
executor worker thread.  This listener essentially replaces the
ProjectListener and some of the ComputerListener events.

We needed to use the SaveableListener as a workaround
for the ComputerListener onConfigurationChange method due to
a bug in the onConfigurationChange method.  The jenkins
config doesn't get saved until after the onConfigurationChange
is called.

This seems to work ok but probably not a good solution because
the SaveableListener fires for every instance of a jenkins node.
So if there are 3 nodes in jenkins it will fire 3 time even though
there was only a change to one of the nodes. This will slow down
the system as you have more executors.

This is also not a great solution because
I'm sensing a race condition that may conflict
between SaveablListner and ComputerListener.  On a delete or
disconnect of a node the disconnect may happen during an
gearman function update which may cause a NPE during the update.

This checkin also enables updating gearman functions on
a project state change (disable/enable).

I believe the only event left that requires gearman funciton
updates are adding and removing of jenkins executors.

Change-Id: I67747d4d895a2474477d2a8ec01c3226e1d5456a