[MSC-106] Before calling dependencyFailed, ServiceControllerImpl.newDependent() should checking if state is not STARTING to avoid duplicate notification.

Plus, add a race condition test case for this.
[MSC-106] Solve random hanging problem involving NewDependentOfFailingServiceTestCase and enable the test.
[MSC-108] Set the TCCL correctly and update tests.

Before calling start()/stop() on the service, the TCCL is set to the service's ClassLoader; before invoking listeners methods, the TCCL is set the the listener's ClassLoader. The same applies to LifecycleContext.execute(Runnable command), whereas the TCCL is set to the command's ClassLoader before invoking command.run().
Update tests accordingly to check that the TCCL is correctly set.
Javadoc
Javadoc
Update dependencies and POM
[AS7-2639] add to ServiceName.getSimpleName() to the exception message to give a hint to the problem
[MSC-111] The methods immediateDependencyUnavailable, immediateDependencyAvailable, transitiveDependencyUnavailable, and transitiveDependencyUnavailable should all check if the service is not being removed before notifying listeners and dependents.

Plus, add race condition tests for catching all those scenarios.
The children services mode should not be changed inside the parent's lock.

Or else we can get an assertion error:
15:28:29,335 WARN  [org.jboss.msc.service] (main) MSC00007: An internal service error has occurred while processing an operation on service third.service: java.lang.AssertionError
	at org.jboss.msc.service.ServiceControllerImpl.removeDemand(ServiceControllerImpl.java:1145)
	at org.jboss.msc.service.ServiceControllerImpl.doUndemandParents(ServiceControllerImpl.java:1116)
	at org.jboss.msc.service.ServiceControllerImpl.access$800(ServiceControllerImpl.java:49)
	at org.jboss.msc.service.ServiceControllerImpl$UndemandParentsTask.run(ServiceControllerImpl.java:1620)
	at org.jboss.msc.service.ServiceControllerImpl.doExecute(ServiceControllerImpl.java:684)
	at org.jboss.msc.service.ServiceControllerImpl.invokeListener(ServiceControllerImpl.java:1489)
	at org.jboss.msc.service.ServiceControllerImpl.access$2600(ServiceControllerImpl.java:49)
	at org.jboss.msc.service.ServiceControllerImpl$ListenerTask.run(ServiceControllerImpl.java:1964)
	at org.jboss.msc.service.ServiceControllerImpl.doExecute(ServiceControllerImpl.java:684)
	at org.jboss.msc.service.ServiceControllerImpl.internalSetMode(ServiceControllerImpl.java:717)
	at org.jboss.msc.service.ServiceControllerImpl.setMode(ServiceControllerImpl.java:690)
	at org.jboss.msc.service.ServiceControllerImpl.transition(ServiceControllerImpl.java:593)
ServiceRegistrationImpl must not perform operations on the internal service inside its own lock.

Or else we can get an assertion error such as this one:
16:59:01,616 WARN  [org.jboss.msc.service] (main) MSC00007: An internal service error has occurred while processing an operation on service serviceTwo: java.lang.AssertionError
	at org.jboss.msc.service.ServiceRegistrationImpl.dependentStarted(ServiceRegistrationImpl.java:205)
	at org.jboss.msc.service.ServiceControllerImpl$DependentStartedTask.run(ServiceControllerImpl.java:1666)
	at org.jboss.msc.service.ServiceControllerImpl.doExecute(ServiceControllerImpl.java:685)
	at org.jboss.msc.service.ServiceControllerImpl.invokeListener(ServiceControllerImpl.java:1490)
	at org.jboss.msc.service.ServiceControllerImpl.access$2700(ServiceControllerImpl.java:49)
	at org.jboss.msc.service.ServiceControllerImpl$ListenerTask.run(ServiceControllerImpl.java:1980)
	at org.jboss.msc.service.ServiceControllerImpl.doExecute(ServiceControllerImpl.java:685)
	at org.jboss.msc.service.ServiceControllerImpl.invokeListener(ServiceControllerImpl.java:1490)
	at org.jboss.msc.service.ServiceControllerImpl.access$2700(ServiceControllerImpl.java:49)
	at org.jboss.msc.service.ServiceControllerImpl$ListenerTask.run(ServiceControllerImpl.java:1980)
	at org.jboss.msc.service.ServiceControllerImpl.doExecute(ServiceControllerImpl.java:685)
	at org.jboss.msc.service.ServiceControllerImpl.immediateDependencyUp(ServiceControllerImpl.java:1009)
	at org.jboss.msc.service.ServiceControllerImpl$DependencyStartedTask.run(ServiceControllerImpl.java:2002)
	at org.jboss.msc.service.ServiceControllerImpl.doExecute(ServiceControllerImpl.java:685)
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1793)
	at org.jboss.msc.service.ServiceControllerImpl.doExecute(ServiceControllerImpl.java:685)
	at org.jboss.msc.service.ServiceControllerImpl$DependentStartedTask.run(ServiceControllerImpl.java:1679)
	at org.jboss.msc.service.ServiceControllerImpl.doExecute(ServiceControllerImpl.java:685)
	at org.jboss.msc.service.ServiceControllerImpl$DemandParentsTask.run(ServiceControllerImpl.java:1610)
	at org.jboss.msc.service.ServiceControllerImpl.doExecute(ServiceControllerImpl.java:685)
	at org.jboss.msc.service.ServiceControllerImpl.addDemands(ServiceControllerImpl.java:1142)
	at org.jboss.msc.service.ServiceControllerImpl.addDemand(ServiceControllerImpl.java:1121)
	at org.jboss.msc.service.ServiceRegistrationImpl.addDemand(ServiceRegistrationImpl.java:220)
	at org.jboss.msc.service.ServiceControllerImpl.doDemandParents(ServiceControllerImpl.java:1105)
	at org.jboss.msc.service.ServiceControllerImpl.access$500(ServiceControllerImpl.java:49)
	at org.jboss.msc.service.ServiceControllerImpl$DemandParentsTask.run(ServiceControllerImpl.java:1602)
	at org.jboss.msc.service.ServiceControllerImpl.doExecute(ServiceControllerImpl.java:685)
	at org.jboss.msc.service.ServiceControllerImpl.commitInstallation(ServiceControllerImpl.java:284)
	at org.jboss.msc.service.ServiceContainerImpl.install(ServiceContainerImpl.java:563)
	at org.jboss.msc.service.ServiceBuilderImpl.install(ServiceBuilderImpl.java:307)
MSC-112 - Add ability to specify whether an MSC container is automatically shut down at VM exit
Update pom and versions and dependencies
MSC-113 - Fix ServiceName.toArray()