Added basic abstraction for authenticating Executors
PersistedList now implements List, not just Iterable.

This required bridge method injector that maps boolean->void
run the build under the designated Authentication objec
Instead of authenticating Executor, authenticating AbstractProjects.

This is necessary because a part of the access control is determining which Executor can accept which Queue.Task, so we can't have the authenticator taking Executor as a parameter.

I briefly thought about changing ExecutorAuthenticator to authenticate Queue.SubTask, but doing this intelligently is very difficult as an authenticator wouldn't really be able to make any sensible decisions unless it checks for specific subtypes (think of the dist-fork plugin and the remote terminal access plugin that implements Queue.Task.) So I made the change to have it accept AbstractProject, which is really the primary use case anyway.

The relevant classes are renamed to better represent what it does now.
Have the scheduling algorithm honor the permissions
tweaking the wording a bit
Grouping related messages together
IntelliJ complains about this. Not sure if it's a real problem
added a test case for ProjectAuthenticator
wrong package name
a test case that verifies whether the queue honors the permissions
Not shipping any implementation out of the box.

... because the fallback behaviour is sufficient for compatibility. In this way, we can phase in this feature more slowly
[FIXED JENKINS-18285] Merge the feature branch