Throw UnexpectedArgumentException instead of ArgException

A finer grained exception for clients to process individually. Also renamed
the test to provide a little bit more info on what is being tested.
Throw DuplicateArgException instead of ArgException

A finer grained exception for clients to process individually. Also renamed
the test to provide a little bit more info on what is being tested.