Improve documentation around raised errors.
- Add tests for additional errors that may be raised.
- Use string interpolation and better error messages
  to avoid getting Ruby errors while trying to raise
  our own.
- Update README.md to include additional errors that
  may be raised.