Proper module dependencies

Add new annotation @Modules that can be applied to a Module derived
class.  @Modules will be used to auto install modules transitively.
Legacy module dependency via @Inject into a module's constructor is
still supported.

This is the preferred method of specifying module dependencies

```java
@Modules(include={ModuleA.class, ModuleB.class})
public class ModuleC {
}
```

Some code still uses this method but we should opt for the annotation based approach.
```java
public class ModuleC {
   @Inject
    ModuleC(ModuleA moduleA, ModuleB moduleB) {
    }
}
```

Additional exclude methods have also been added to the LifecycleInjectorBuilder making it possible to specify excludes using the builder as well via the @Modules annotation.

```java
builder.withoutModuleClasses(ModuleA.class, ModuleB.class);
```