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.
As far as I remember the promotion order was `int` → `long` → `decimal` → `double`; at least it was for integer literals. Whatever fits first without overflow will be used.
Could it be that the rules here are for the most part the same as for integer literals? If so, can we re-use either implementation for the other case?