[w32file] Push coop transitions into functions, closer to syscalls (#4370)
* [w32file] Push coop transitions into functions, closer to syscalls
Previous the coop transitions happened in the icalls and high level
platform-independent functions. Now they surround syscalls and platform API
calls, instead.
(Among other benefits, this fixes a problem where MoveFile on unix was
implemented in some circumstances in terms of CopyFile which resulted in an
illegal coop transition from blocking to blocking.)
* There is a FIXME with `mono_w32handle_new_fd` and `mono_w32handle_close`: the w32handle API is not coop-friendly yet, so we have to switch to gc safe mode around calls to `w32handle_new_fd` and `w32handle_close`. In the case of `w32handle_close`, it calls back into the w32file functions `pipe_close`, `console_close` and `file_close`. So the calls to `close(2)` inside those functions are not surrounded by transitions to GC safe mode - instead they require that we're already in safe mode (as is the case when they're called from w32handle).