Constructs and returns a fully configured instance of a specific type.
Implementations may choose not to construct a new instance, but instead
return a previously created instance.
Implementations must correctly implement Object.equals(Object) and
Object.hashCode() as Factorys are often compared with each
other for equivalence.