Fix Syscall.readlink() for non-ascii targets

Syscall.readlink() currently returns an integer indicating the number of
bytes in the link. As buf contains chars, this value is useless if the
target contains non-ascii characters.

This commit creates a new overload which uses a byte array instead of a
StringBuilder and rewrites the old overload to return the number of chars
instead.

Fixes #11778 and #9611
Merge pull request #701 from steffen-kiess/fix-11778

Fix Syscall.readlink() for non-ascii targets
Fix overflow checking in newarray with 64 bit array lengths. Fixes part of #13544.
Fix a missing return statement in 16d2bcaa379be0c38f84492a5528c5ab6dcd7e7d.