Support custom loaders

I promise, this is the last pr (for today)

This time around, I've tried to refactor the load_schema_file to support multiple file types, currently it loads the default json, yaml, and optionally supports toml.