raise error when reading malformed schema files

the existing `read/1` and `read!/1` are less than desirable. `read/1` is used when coalescing schema files and if any schema is malformed it ignored. It is much more desirable to raise an error in this case. 

the functionality we really want from `read`/`read!` is

1. use an empty schema if the file DNE
2. use a well formed schema
3. raise an error for a bad schema