Throw more informative exceptions when addition and subtract cause overflow

Currently an InvalidArgumentException is thrown during overflow causing
addition and subtract.

This exception type is not very informative, and because it is an
internal operation that is causing it, a more informative exception
should be thrown.

With this change, where it is expected that an operation should produce
an integer, when it doesn't the Money object now throws an OverflowException