Add a ISE exception subclass for scoping exceptions
and document when it will be thrown for all the various
methods in ServletScopes.java

------------
Manually synced.
COMMIT=32471733
Add an @Inject constructor to DefaultFilterPipeline so services which depend upon it can be used with Modules.requireAtInjectOnConstructorsModule()

----------------
Manually synced.
COMMIT=33399588
Upgrade to cglib 3.0 adn ASM 4.0.

------------------
Manually synced.
COMMIT=35272017
update cglib dependency in poms.
Add support for ProvisionListeners to notify on toInstance & constant bindings.

---------------------
Manually synced.
COMMIT=41634417
HttpServletRequest#getCookies() can return null; checks that in ContinuingHttpServletRequest.

-------------------
Manually Synced.
COMMIT=42047244
Suppress a warning in advance that will be a run-time error in Guice in a subsequent commit, and which will be added to error-prone and caught at compile-time for those who use it.

------------------
Manually Synced.
COMMIT=43228490
Fix http://code.google.com/p/google-guice/issues/detail?id=742 by having assistedinject fail if the target implementation class has a scop
ing annotation on it.  Scope annotations on assistedinject targets were always ignored by Guice, and allowing them on the classes led to lots of confusion when reading code.  The new behavior makes for much more readable code.

This could potentially cause runtime errors at injector creation time if you accidentally had scoping annotations on the implementation class.  The fix is just to remove that scoping annotation -- there will be no change in behavior, because the scope was ignored.

There is an extreme edge case where this change may cause a problem, but it creates sufficiently confusing code that we are OK with turning it into a failure: You used assistedinject yet had no assisted parameters, and sometimes injected the object directly and other times constructed it through the factory.  When injecting directly, it would adhere to the scope, but when constructing through the factory it would create a new instance every time.  ... If you *really* wanted this behavior, the workaround would be to bind using toConstructor in Scopes.NO_SCOPE to a named(unscoped) version of the class, which is also more expressive.  (But, more often than not, what you really wanted was to *not do this*.)

------------------
Manually Synced.
COMMIT=43242119
Fix a == vs .equals() bug in MoreTypes.

----------------
Manually Synced.
COMMIT=44410191
Fix issue 663: Grapher is producing corrupt graphs

This CL fixes issue 663, where implementation and instance nodes are set to be style=invis causing them not to show up on the Guice graph: https://code.google.com/p/google-guice/issues/detail?id=663&q=grapher&colspec=ID%20Type%20Status%20Priority%20Milestone%20Owner%20Summary%20Component

See here for the workaround that led to this solution: http://stackoverflow.com/questions/9301007/is-there-any-way-to-get-guice-grapher-to-work

------------------
Manually Synced.
COMMIT=44428433
Clear context during provision.  Fixes http://code.google.com/p/google-guice/issues/detail?id=743

--------------
Manually Synced.
COMMIT=45102829
Change Key so that it upgrades Annotation classes where all methods have default values into an instance of the Annotation with the defaults as values, so that:
  @Retention(RUNTIME)
  @BindingAnnotation @interface AllDefaults {
    int hasDefault() default 1;
  }

  @AllDefaults class Foo {}

  void testKey() {
    assertEquals(Key.get(Foo.class, Foo.class.getAnnotation(AllDefaults.class)),
                 Key.get(Foo.class, AllDefaults.class));
  }

Also adds an option to "require exact binding annotations", which disables the error-prone fallback built into Guice whereby a binding for @Named Foo can substitute for @Named("foo") Foo if the latter doesn't exist but the former does.

-----------------
Manually Synced.
COMMIT=45600016
Use a single UniqueAnnotation instead of creating a new one each time.

-----------------
Manually Synced.
COMMIT=45708839
Add logging for when AssistedInject falls into non-optimized mode, so people can take action and fix it.

An @Assisted Provider in a class param:
WARNING: AssistedInject factory com.google.inject.assistedinject.FactoryProvider2Test$ColoredCarFactory will be slow because class com.google.inject.assistedinject.FactoryProvider2Test$Subaru has Assisted Provider dependencies or injects the Injector. Stop injecting Assisted Provider<T> (instead use Assisted T) or Injector to speed things up. (It will be a ~6500% speed bump!)  The exact offending deps are: [Key[type=com.google.inject.Provider<com.google.inject.assistedinject.FactoryProvider2Test$Color>, annotation=@com.google.inject.assistedinject.Assisted(value=)]@com.google.inject.assistedinject.FactoryProvider2Test$Subaru.colorProvider]

The injector in class param:
WARNING: AssistedInject factory com.google.inject.assistedinject.FactoryProvider2Test$ColoredCarFactory will be slow because class com.google.inject.assistedinject.FactoryProvider2Test$Segway has Assisted Provider dependencies or injects the Injector. Stop injecting Assisted Provider<T> (instead use Assisted T) or Injector to speed things up. (It will be a ~6500% speed bump!)  The exact offending deps are: [Key[type=com.google.inject.Injector, annotation=[none]]@com.google.inject.assistedinject.FactoryProvider2Test$Segway.injector]

An @Assisted Provider in a constructor arg:
WARNING: AssistedInject factory com.google.inject.assistedinject.FactoryProvider2Test$ColoredCarFactory will be slow because class com.google.inject.assistedinject.FactoryProvider2Test$Flamingbird has Assisted Provider dependencies or injects the Injector. Stop injecting Assisted Provider<T> (instead use Assisted T) or Injector to speed things up. (It will be a ~6500% speed bump!)  The exact offending deps are: [Key[type=com.google.inject.Provider<com.google.inject.assistedinject.FactoryProvider2Test$Color>, annotation=@com.google.inject.assistedinject.Assisted(value=)]@com.google.inject.assistedinject.FactoryProvider2Test$Flamingbird.<init>()[1]]

----------------
Manually Synced.
COMMIT=45725763
Fix to pom.xml to address ASM4/CGLIB3 upgrade (from Stuart McCulloch)

----------------
Manually Synced.
COMMIT=46888891
Issue 183: Replace class-level global SINGLETON lock with a finer-grained lock
Issue 288: Decouple the context ThreadLocal from the containing Injector/ClassLoader
Issue 350: Wrap System.getProperty call in case security is enabled
Issue 492: Provide built-in injection of SLF4J loggers
Issue 618: Let sub-classes of GuiceFilter customize the servlet filter pipeline