Make ServletScopes#scopeRequest slightly more efficient for larger seed maps.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=61542674
Change LinkedBindingBuilder.toProvider(Provider) to accept a jsr330 provider,
in addition to the Guice Provider.  This is an incompatible change for people who extend LinkedBindingBuilder, but not for people who use it.

This will allow people to switch to JSR330 types more easily.

LinkedBindingBuilder needs both toProvider(Provider) and toProvider(javax.inject.Provider) because precompiled jars (e.g, stuff in third_party, maven, etc..) that used toProvider(Provider) would otherwise throw a NoSuchMethodError.

I left the getProviderInstance method on ProviderInstanceBinding, otherwise
that would require anyone using the SPI method to change their code to accept
the weaker type.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=61966924
Improve OutOfScopeException so that it tells you which key it was trying to
get.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=62699406
This change removes final from fields annotated with @Inject.  In addition to being discouraged due to weak semantics [1], it is incompatible with the standard javax.inject.Inject annotation [2].

Refactoring: https://code.google.com/p/error-prone/wiki/GuiceInjectOnFinalField

[1] https://code.google.com/p/google-guice/wiki/Injections#Field_Injection
[2] https://code.google.com/p/google-guice/wiki/JSR330
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=62760764
Add an SPI for @Provides methods (using the extensions SPI) so that users can
do more analysis (with the enclosing instance, method, etc..).

Notably, this can let users write analysis that looks for @Provides methods
declared with @Nullable, and compare against injection points w/o @Nullable,
failing if so.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=62834918
Update MapBinder so it fails on duplicate bindings with a more descriptive error message, including all the keys that had duplicates and where the duplicate bindings were bound.  Example error message that has 'a' bound twice and 'b' bound twice:

1) Map injection failed due to duplicated key "a", from bindings at:
	com.google.inject.multibindings.MapBinderTest.configure(MapBinderTest.java:337) (via modules: com.google.inject.multibindings.MapBinderTest$1Main -> com.google.inject.multibindings.MapBinderTest$1Module1)
	com.google.inject.multibindings.MapBinderTest.configure(MapBinderTest.java:344) (via modules: com.google.inject.multibindings.MapBinderTest$1Main -> com.google.inject.multibindings.MapBinderTest$1Module2)

 and key: "b", from bindings at:
	com.google.inject.multibindings.MapBinderTest.configure(MapBinderTest.java:345) (via modules: com.google.inject.multibindings.MapBinderTest$1Main -> com.google.inject.multibindings.MapBinderTest$1Module2)
	com.google.inject.multibindings.MapBinderTest.configure(MapBinderTest.java:352) (via modules: com.google.inject.multibindings.MapBinderTest$1Main -> com.google.inject.multibindings.MapBinderTest$1Module3)

  at com.google.inject.multibindings.MapBinder.initialize(MapBinder.java:380)
  at com.google.inject.multibindings.MapBinderTest.configure(MapBinderTest.java:357) (via modules: com.google.inject.multibindings.MapBinderTest$1Main -> com.google.inject.multibindings.MapBinder$RealMapBinder)
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=62865462