Provide a future path to refactoring the Queue locking strategy

- Also tidy up some holes in locking strategy that can cause builds to be scheduled on
  executors that are about to be interrupted or nodes in the process of being removed
Allow programmatic QueueItemAuthenticators that are not user configurable
Damn you Java 7 for not catching
Actually don't need the lock here as c.kill() now does the right thing
Allow Projects to take the Queue.Item's actions into consideration when determining their default authentication