Rename Long_To_Bytes to REBCNT_To_Bytes

and Bytes_To_Long to Bytes_To_REBCNT. Because the implementation assumes
the size of Long is 4 bytes, which is not the case on 64-bit systems.
change type of handle to uintptr_t
loosen the memory limit on 64-bit systems
change all unsigned long to SHA_LONG for 64-bit systems

where SHA_LONG is defined as u32. This fixes the problem that checksum
differs every time.
pass NULL as the pointer instead of 0

0 is a 32-bit integer, and NULL on x64 should be 64-bit, this leads to a
crash with the following code:

do http://www.rebol.com/speed.r ;this runs fine
do http://www.rebol.com/speed.r ;this crashes the interprator
fix the crashing on 64-bit systems

"multiply -1 -9223372036854775808" raises an arithmetic exception at
"anum / num". It doesn't crash on 32-bit systems because gcc uses a
function __divi3 to do the division instead of the CPU division
instruction directly.
correct the type of size
fix a crash on 64-bit systems

When index = tail, it will crash on 64-bit systems:

REBCNT out = 0 at here:
for (out--; out >= start; out--) {
	//out = 0xFFFFFFFF (or -1 as a signed integer)
	uc = GET_ANY_CHAR(ser, out); //expands to ser->data[out], which
is the same as *(ser->data + out). On 32-bit system, ser->data is
32-bit, so it's equivalent to *(ser->data - 1), which is a valid address,
but wrong content; while on 64-bit system, ser->data is 64-bit, so out
has to be promoted to 64-bit integer, which results in *(ser->data +
0xFFFFFFFF), which is not a valid memory location.
    ...
}