Simple implementation of chmod(path, mode)

currently only integer modes, can do string modes like +x later
fixes #7574

Interestingly on Windows, it looks like libuv ignores everything you ask for except the `0o200` bit, and the returned `filemode()` ends up either `0o444` or `0o666`.