Merge from moe_writing_branch_from_02a32292dab18eafe393676bf6d3a32725219078

Merge in change from google internal repository.  Notable large changes are:

  * Introduce Producers core API (though generators not present yet).  Producers are an asynchronous dependency graph suitable for creating worker graphs.  More detail on those will be added to documentation later.
  * Scope validations between components is stricter.
    - Singleton components cannot depend on non-Singleton components.
    - Custom scopes (always supported) are now required for multiple-scope situations
    - Inter-component scope relationships are evaluated to ensure they don't circle back (Singleton -> Request -> Singleton).
    - Some scope validation can be turned down to warning or off to permit Dagger1 project migration (see ComponentProcessor javadoc for options)
  * Some bug-fixes and cleanup

Note: Some regressions have been noted - notably with dependency cycle reporting.  If you get a stack overflow, you have a dependency cycle that is blowing up our reporting.  It's a known error we're fixing.
Looks like `A` is here to showcase that parameters can be dereferenced. Ex. If you look at the println stuff below, the parameter A implies an eager call to `ListenableFuture<A>.get`, whereas the `Producer<C>` is lazy.