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