FIX: Correct arithmetic operations

Fixis issues found in the discussion of #240:
Arithmetic operations are now done in their native datatype and only
casted if an overflow happens. This leads to better precision in results.
Also, hex strings are now allowed to have a sign (+ or -) if (and only if) they are
used in arithmetic operations.
What I understood in the specification was just "convert both to int" and the following sentence would refer to the whole arithmetic operation (That's the overflow/cast thing).
But of course you're idea is right and I thought too narrow-minded in this place. So what's the correct logic here?
Obviously, one of both operands is of type `int` at this line. So we figure out which of both operands is int and try to cast the other one to int, then long, then double and fail otherwise?