Fix issue 11583.

The problem is that the assumption that the first word of a `BigUint` is always non-zero is false when `BigUint` == `biguintcore.ZERO`, which is defined to be `[0]`. So we need to check for that case in `BigUint.opCmp(ulong)`.

Also, crash-proof `BigUint`'s invariant, since it would cause an out-of-bounds array access if a bug causes `data.length==0`.