Fix: correct reimplementation of BatInt.Safe_int.mul

The algorithm is described in the Cert C Coding Standard:
https://www.securecoding.cert.org/confluence/display/seccode/INT32-C.+Ensure+that+operations+on+signed+integers+do+not+result+in+overflow
Testsuite updated
fast path for SafeInt.mul

add a fast path without integer divisions when both factors
have less then 31 bits.
Merge pull request #584 from madroach/Int.Safe_int.mul-fix

Int.safe int.mul fix