raise exception objects

- Raise exception objects in all cases instead of strings
- Use the new CaskInvalidError exception where appropriate
- Improve user-visible messages in various ways