Add external schema parsers

This allows the definition of external schema parsers - is a breaking change to the API.
@titomiguelcosta I agree with you on this - refactored as suggested