Add external schema parsers

This allows the definition of external schema parsers - is a breaking change to the API.
@titomiguelcosta sorry - rewrote history and lost the comments. Do you think this is nicer?