Handle file/index not found errors in reader classes gracefully instead of segfaulting!

This has been a common complaint against gamgee of late, and
with very good reason!

Resolves #336
This is a high-level design discussion we should have when Joel gets back -- I know that he is an advocate for fine-grained exceptions. The advantage obviously is that if we ever decide to catch some of these exceptions, we will be able to be selective about which errors we handle and which we treat as fatal. Also, each exception class can have boilerplate error message text inside of it appropriate to each kind of error, and this boilerplate error text doesn't have to be repeated all over the codebase. But let's have a debate next week :)