Memoize Key#toString() to reduce allocations.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=63557612
Preparations for OptionalBinder.  This fixes MapBinder's SPI so elements from different MapBinders are distinct, and also fixes ProviderLookup's Provider so it exposes its dependency, which allows MapBinder to properly find its dependencies.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=63811558
Adds a new OptionalBinder.  OptionalBinder allows frameworks to setup bindings for items that user code may or may not bind.  It also allows frameworks to set default values that users can override.

The API is:
OptionalBinder.newOptionalBinder(Binder, Class|TypeLiteral|Key) -> OptionalBinder
optionalBinder.setDefault -> LinkedBindingBuilder
optionalBinder.setBinding -> LinkedBindingBuilder

By way of example, this will do:

newOptionalBinder(..) -> @Inject Thing -> exception: neither setDefault nor setBinding called
newOptionalBinder(..) -> @Inject Optional<Thing> -> isPresent() == false
newOptionalBinder(..).setDefault().to("a") -> @Inject Thing -> "a"
newOptionalBinder(..).setDefault().to("a") -> @Inject Optional<Thing> --> get() == "a"
newOptionalBinder(..).setDefault().to("a") + newOptionalBinder(..).setBinding().to("b") -> @Inject Thing -> "b"
newOptionalBinder(..).setDefault().to("a") + newOptionalBinder(..).setBinding().to("b") -> @Inject Optional<Thing> -> get() == "b"
newOptionalBinder(..).setBinding().to("b") -> @Inject Thing -> "b"
newOptionalBinder(..).setBinding().to("b") -> @Inject Optional<Thing> -> get() == "b"
newOptionalBinder(..).setDefault().to("a") + newOptionalBinder(..).setDefault().to("b") -> configuration exception
newOptionalBinder(..).setBinding().to("a") + newOptionalBinder(..).setBinding().to("b") -> configuration exception

(This also adds the jsr305 jar for build time, because doclava wanted it. Frustrating.)

(This also fixes users that implemented MultibindingsTargetVisitor, because I can't use default methods yet.)
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=63873859
Add OptionalBinderTest into multibindings AllTests.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=63966263
Enhance WeakKeySet to auto evict keys and avoid calling toString on Keys.

This should fix https://code.google.com/p/google-guice/issues/detail?id=756.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=64083354
Fix MapBinder's duplicate key error message so that more than one binding with the same source gets listed twice.  This was causing a problem with the tests that turned stack traces off, because the two different bindings line numbers were both changed to "Unknown Source", so it collapsed them into a single item.

Maven ran all the flag variations for core + extensions.
Internal builds ran them all just for core, not the extensions (fixed in this CL).
Ant runs them all for core, but doesn't even run any extension tests AFAICT (not fixed in this CL).
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=64143669