Overloaded C++ function Python wrappers now raise a TypeError instead of NotImplementedError

Occurs when the types passed are incorrect. This change means
there is now consistency with non-overloaded function wrappers which have always
raised TypeError when the incorrect types are passed.

See issue #1293
6 files changed