Add external schema parsers

This allows the definition of external schema parsers - is a breaking change to the API.
One possible approach, we could have an optional argument, like __construct(SchemaParser $schemaParser = null) and in the body check if null === $schemaParser, if so, we use instantiate the default one