Add hasSingleton

Enables checking for singletons. Similar to the new has method but will never create a new instance. It only draws from existing singletons or objects that have been explicitly set at runtime.

In order to do this though set() has been changed so that if a value is given it will be explicitly set as a singleton. This changes the way make() works as it will no longer behave like get for sets with explicit values.