Use distinct exceptions for many cases

Caller is likely going to want to catch certain conditions.  For those,
use more specific exception classes.  Exceptions indicating either TODO
or usage errors are being left as 'Exception' for the time being.

Change-Id: I4d68a2dbc394b534d54586b9f770160c1409f720