type - - the string representation which should be converted to an EntitySpec
loader - - use it to load any Java classes
parentEncounteredTypes - - an immutable set of the items which are currently being resolved up the stack,
used to prevent cycles. Implementations should not try to resolve the type if the symbolicName is
already contained in here. When resolving a type add it to a copy of the list before
passing the new instance down the stack. See CatalogEntitySpecResolver for example usage.
The EntitySpec corresponding to the passed type argument, possibly pre-configured
based on the information contained in type. Return null value to indicate that
the implementation doesn't know how to convert type to an EntitySpec. Throw an
exception if type looks like a supported value, but can't be loaded.