True singleton provider

When annotating a Provider as @Singleton Guice treats the provider, and
not the object it is providing, as the singleton.  As a result multiple
instances of the type end up being created whenever the type is
injected or get() is called.  When combining @Singleton and extending
from the new SingletonProvider the provider will cache and always
return the first object created thereby making the type a singleton.