Add external schema parsers

This allows the definition of external schema parsers - is a breaking change to the API.
Why not pass as an argument this object? This way we can not mock the parser. And I would move the full namespace to an use statement. This should be a standard of the library. The reason behind it is that you look at the top of the file and you straight away know all the dependencies of the class.