Switch: fix utf8 (again unsigned char*) and tricky switch fallthru

when we divide the space into 2 halves, fallthru from the first into the 2nd.
do not add a return -1 then. check with new arg $last.

utf8 was also broken because we store chars as unsigned but provided s as signed