Store Provider<T> in DynamicSet, DynamicMap

Instead of storing the object instance T, store the Provider<T>.

This enables Guice to provide singletons wrapped in a Provider, or to
dynamically create the object on each use. Dynamic creation enables
plugins to make a new listener instance for each event that is fired,
permitting the listener to then use instance member fields during the
event. How this works is up to the plugin, but binding with @Singleton
will still be the recommended method for registering listeners.

Change-Id: I83b22f3ac2214f45c3c298937146843a806bea2f
7 files changed