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.