Tests can now catch exceptions
Throwing an exception when methods are ambiguously named
Throwing an exception when multiple special methods.
Some refactoring