Added a number of specific exception types implementations may use.

 - These are all runtime exceptions because that's the way people seem to want to go. I
   expect debate, and that's fine. For now, the plan is to thread these through. We can
   switch the parent class and turn them into checked exceptions we want to go that way.
Updated Dataset and its implementation / internal consumers to use DatasetException rather than IOException.

- Some formatting fixup occurred in the process.