Concurrent injection provider

Guice constructs dependencies serially which can cause the injectee to take a very long time to initialize.  For top level applications this process can be sped up substantially by parallelizing creating the dependencies.  The following approach provides a custom Provider that will construct dependencies in parallel and only once all dependencies have been constructed will it create the object.  See ConcurrentProvider.of() for more details.

For example, to enable parallel injection into Foo,
```java
@Singleton
public class Foo {
     @Inject
     public Foo(@NonConcurrent NonConcurrentSingleton, DependencyA a, DependencyB b, Provider<DependencyC> c, NonSingletonD d) {
     }
  }
}
```

Add this binding,
```java
public void configure() {
   bind(Foo.class).toProvider(ConcurrentProviders.of(Foo.class)).asEagerSingleton();
}
```
So nonConcurrent means nonConcurrent with respect to injectee. It will still be concurrent to its sibling dependencies?