lots more tests, cleanup, and specification of the exception throwing behavior
updated readme